Альтернатива Files.probeContentType?
В веб-проекте пользователи загружают свои файлы, но когда я получаю их на сервере, они хранятся в виде файлов .tmp, а не в их исходном расширении файла (это также мое предпочтительное поведение).
Однако это вызывает проблему с Files.probeContentType()
. Хотя локально для меня, на моей машине Linux dev, Files.probeContentType()
работает правильно и определяет правильный тип mime, когда я загружаю свой проект на производственный сервер (amazon beanstalk), он, похоже, не правильно определяет тип mime.
Из чтения javadocs кажется, что реализация Files.probeContentType()
отличается, и я думаю, что на рабочем сервере она читает расширение файла и поэтому не может определить тип содержимого.
Какая хорошая и быстрая альтернатива Files.probeContentType()
, которая примет аргумент File
и вернет строку, подобную image/png
, в качестве результирующего типа mime?
Ответы
Ответ 1
Взгляните на Apache Tika. Он может легко определить тип mime:
Tika tika = new Tika();
File file = ...
String mimeType = tika.detect(file);
Здесь минимальная требуемая зависимость maven:
<dependency>
<groupId>org.apache.tika</groupId>
<artifactId>tika-core</artifactId>
<version>1.12</version>
</dependency>
Ответ 2
Этот ответ предлагает использовать:
InputStream is = new BufferedInputStream(new FileInputStream(file));
mimeType = URLConnection.guessContentTypeFromStream(is);
//...close stream