Конфликт версии ядра Asp.Net

Чтобы чип с моими 5 центами:

TL, DR

Я использую MimetypesFileTypeMap и добавляю любой мим, которого нет, и я специально нуждаюсь это файл mime.types.

И теперь длинное чтение:

Прежде всего, список типов MIME - огромный , см. здесь: https://www.iana.org/assignments/media-types/media-types.xhtml

Мне нравится использовать стандартные средства, предоставляемые JDK во-первых, и если это не сработает, я пойду и посмотрю что-то еще.

Определить тип файла из расширения файла

Начиная с версии 1.6 Java имеет MimetypesFileTypeMap, как указано в один из ответов выше, и это самый простой способ определить тип mime:

new MimetypesFileTypeMap().getContentType( fileName );

В его реализации ванили это не делает много (т. е. работает для .html, но это не так. PNG). Однако очень просто добавить любой тип контента, который вам может понадобиться:

  1. Создать файл с именем «mime.types» в папке META-INF в вашем проекте
  2. Добавить строка для каждого типа mime, который вам нужен, и реализация по умолчанию не предоставляет (существует сотни типов mime, и список увеличивается с течением времени).

Примеры записей для png и js-файлов будут be:

image/png png PNG
application/javascript js

Для формата файла mime.types см. более подробную информацию здесь: https://docs.oracle.com/javase/7/docs/api/javax/activation/MimetypesFileTypeMap .html

Определить тип файла из содержимого файла

Начиная с 1.7, Java имеет java.nio.file.spi.FileTypeDetector , который определяет стандартный API для определения типа файла в конкретном способе реализации .

Чтобы получить тип mime для файла, вы просто будете использовать Files и сделать это в вашем коде:

Files.probeContentType(Paths.get("either file name or full path goes here"));

В определении API предусмотрены средства, которые поддерживают либо определение типа файла mime из имени файла, либо из файла fil e content (магические байты). Вот почему метод probeContentType () вызывает IOException, если реализация этого API использует Path, предоставленный ему, чтобы фактически попытаться открыть связанный с ним файл.

Опять ваниль реализация этого (тот, который поставляется с JDK) оставляет желать лучшего.

В каком-то идеальном мире в галактике далеко, далеко, все эти библиотеки, которые пытаются решить эту проблему с файлом-типом можно просто реализовать java.nio.file.spi.FileTypeDetector , вы бы упали в jar-файл предпочтительной библиотеки реализации в ваш путь к классам и это было бы так.

В реальном мире, где вам нужен раздел TL, DR, вы должны найти библиотеку с большинством звезд рядом с ее именем и использовать ее. Для этого конкретного случая мне не нужен один (пока;)).

0
задан Dima Kozhevin 30 December 2018 в 16:04
поделиться