JSP: Получить MIME-тип при загрузке файла - PullRequest
6 голосов
/ 23 февраля 2011

Я загружаю файл и хочу получить Mime-тип из загруженного файла.

Я пытался использовать request.getContentType () , но когдаЯ звоню:

String contentType = req.getContentType();

Будет возвращено:

multipart / form-data;border = --------------------------- 310662768914663

Как получить правильное значение?

Заранее спасибо

Ответы [ 3 ]

22 голосов
/ 24 февраля 2011

Звучит так, как будто вы доморощенный анализатор multipart/form-data. Я бы не рекомендовал это делать. Скорее используйте приличный, такой как Apache Commons FileUpload . Для загруженных файлов предлагается FileItem#getContentType() для извлечения указанного пользователем типа контента, если таковой имеется.

String contentType = item.getContentType();

Если он возвращает null (только потому, что клиент не указал его), тогда вы можете воспользоваться ServletContext#getMimeType() на основе имени файла.

String filename = FilenameUtils.getName(item.getName());
String contentType = getServletContext().getMimeType(filename);

Это будет решено на основе <mime-mapping> записей в файле сервлетконтейнера по умолчанию web.xml (в случае, например, Tomcat, он присутствует в /conf/web.xml), а также на web.xml вашего веб-приложения, если таковое имеется, что может разверните / переопределите сопоставления по умолчанию для контейнеров сервлетов.

Однако необходимо помнить, что значение многоэлементного типа контента полностью контролируется клиентом, а также что предоставляемое клиентом расширение файла не обязательно должно представлять фактическое содержимое файла. Например, клиент может просто отредактировать расширение файла. Будьте осторожны при использовании этой информации в бизнес-логике.

Связанный:

0 голосов
/ 24 февраля 2011

Вы можете использовать MimetypesFileTypeMap

String contentType = new MimetypesFileTypeMap().getContentType(fileName)); // gets mime type

Однако вы можете столкнуться с накладными расходами при редактировании файла mime.types, если тип файла еще не указан. (Извините, я забираю это обратно, поскольку вы можете программно добавлять экземпляры на карту, и это будет первое место, которое она проверяет)

0 голосов
/ 23 февраля 2011

просто используйте:

public String ServletContext.getMimeType(String file)
...