diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/ImageUploadHelper.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/ImageUploadHelper.java index de632bb64..c9328f93a 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/ImageUploadHelper.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/ImageUploadHelper.java @@ -68,6 +68,9 @@ public class ImageUploadHelper { /** Recognized file extensions mapped to MIME-types. */ private static final Map RECOGNIZED_FILE_TYPES = createFileTypesMap(); + /** Browser-specific MIME-types mapped to recognized MIME-types. */ + private static final Map NON_STANDARD_MIME_TYPES = createNonStandardMimeTypesMap(); + private static Map createFileTypesMap() { Map map = new HashMap(); map.put(".gif", "image/gif"); @@ -78,6 +81,18 @@ public class ImageUploadHelper { return Collections.unmodifiableMap(map); } + /** + * Internet Explorer can tell us that an image has a funky + * Microsoft-specific MIME-type, and we can replace it with one that + * everyone recognizes. This table records those types. + */ + private static Map createNonStandardMimeTypesMap() { + Map map = new HashMap(); + map.put("image/x-png", "image/png"); + map.put("image/pjpeg", "image/jpeg"); + return Collections.unmodifiableMap(map); + } + /* * Prevent Java Advanced Imaging from complaining about the lack of * accelerator classes. @@ -140,6 +155,7 @@ public class ImageUploadHelper { String filename = getSimpleFilename(file); String mimeType = getMimeType(file); if (!RECOGNIZED_FILE_TYPES.containsValue(mimeType)) { + log.debug("Unrecognized MIME type: '" + mimeType + "'"); throw new UserMistakeException("'" + filename + "' is not a recognized image file type. " + "Please upload JPEG, GIF, or PNG files only."); @@ -337,6 +353,11 @@ public class ImageUploadHelper { private String getMimeType(FileItem file) { String mimeType = file.getContentType(); if (mimeType != null) { + // If the browser supplied the MIME type, we may need to + // replace it with the standard value. + if (NON_STANDARD_MIME_TYPES.containsKey(mimeType)) { + mimeType = NON_STANDARD_MIME_TYPES.get(mimeType); + } return mimeType; }