Подтвердить что ты не робот

Альтернатива Files.probeContentType?

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

Однако это вызывает проблему с Files.probeContentType(). Хотя локально для меня, на моей машине Linux dev, Files.probeContentType() работает правильно и определяет правильный тип mime, когда я загружаю свой проект на производственный сервер (amazon beanstalk), он, похоже, не правильно определяет тип mime.

Из чтения javadocs кажется, что реализация Files.probeContentType() отличается, и я думаю, что на рабочем сервере она читает расширение файла и поэтому не может определить тип содержимого.

Какая хорошая и быстрая альтернатива Files.probeContentType(), которая примет аргумент File и вернет строку, подобную image/png, в качестве результирующего типа mime?

4b9b3361

Ответ 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