Сервлет для загрузки файла - contentType, возвращающий 'none', когда расширение файла в CAPS - почему? - PullRequest
0 голосов
/ 06 марта 2012

Мой Java-сервлет обрабатывает файл, отправленный через форму на моей странице JSP. Я хочу принимать только файлы изображений. Итак, первое, что делает сервлет, это проверяет, является ли тип содержимого изображения.

Для проверки типа контента я использую:

File f = new File(fieldValue); // Create a FileItem object to access the file.

// Get content type by filename.
 String contentType = getServletContext().getMimeType(f.getName());                               
if(contentType == null) contentType = "none";

if(contentType.startsWith("image")) {
   //call methods - resize photo
}

Проблема? Он будет принимать файл изображения, если расширение (.jpg, .png и т. Д.) НЕ пишется с заглавной буквы. Когда расширение файла в формате CAPS (например, myphoto.JPG), вызов getServletContext().getMimeType(f.getName()) возвращает null.

Мой сервлет меняет все имя файла на строчные буквы, но это все равно не имеет значения, если файл представлен заглавными буквами для его расширения.

Что я могу сделать, чтобы исправить эту проблему?

1 Ответ

3 голосов
/ 06 марта 2012

Согласно API,

Тип MIME определяется конфигурацией контейнера сервлета и может быть указан в дескрипторе развертывания веб-приложения.

Если вы используете Tomcat, посмотрите Tomcat / conf / web.xml. Там у Tomcat есть сопоставления типов MIME по умолчанию. Но, как говорит API, вы можете добавить сопоставления в файл web.xml вашего веб-приложения.

<mime-mapping>
    <extension>JPG</extension>
    <mime-type>image/jpeg</mime-type>
</mime-mapping>
...