Как определить соответствующее расширение файла из mime Type в Java
я загружаю файлы в корзину Amazon s3 и имею доступ к InputStream и строке, содержащей тип MIME файла, но не исходное имя файла. Это до меня, чтобы на самом деле создать имя файла и расширение, прежде чем нажать Файл до S3. Есть ли библиотека или удобный способ определить соответствующее расширение для использования из типа MIME?
Я видел некоторые ссылки на библиотеку Apache Tika, но это кажется излишним, и я не смог чтобы получить его, чтобы успешно обнаружить расширения файлов еще. Из того, что я смог собрать, кажется, что этот код должен работать, но я просто получаю пустую строку, когда моя переменная типа "image/jpeg"
MimeType mimeType = null;
try {
mimeType = new MimeTypes().forName(type);
} catch (MimeTypeException e) {
Logger.error("Couldn't Detect Mime Type for type: " + type, e);
}
if (mimeType != null) {
String extension = mimeType.getExtension();
//do something with the extension
}
1 ответов
Как отметили некоторые комментаторы, нет универсального сопоставления 1:1 между типами и расширениями файлов... Некоторые типы имеют более одного возможного расширения, многие расширения совместно используются несколькими типами, а некоторые типы не имеют расширения.
там, где это возможно, вам гораздо лучше хранить тип mimetype и использовать его в будущем и забыть о расширении.
тем не менее, если вы хотите получить наиболее распространенное расширение файла для данного типа, то Тика является хорошим способом пойти. Apache Tika имеет очень большой набор миметипов, о которых он знает, и для многих из них он также знает MIME magic для обнаружения, общих расширений, описаний и т. д.
Если вы хотите получить наиболее распространенное расширение для файла JPEG, то как показано в этот модульный тест Apache TIKA вам просто нужно сделать что-то вроде:
MimeTypes allTypes = MimeTypes.getDefaultMimeTypes();
MimeType jpeg = allTypes.forName("image/jpeg");
String jpegExt = jpeg.getExtension(); // .jpg
assertEquals(".jpg", jpeg.getExtension());
главное, что вам нужно загрузить xml-файл, который в комплекте в тика банку, чтобы получить определения всех типов миметиков. Если вы также имеете дело с пользовательскими типами mimetypes, то Tika поддерживает их, и измените строку один на:
TikaConfig config = TikaConfig.getDefaultConfig();
MimeTypes allTypes = config.getMimeRepository();
используя метод TikaConfig для получения типов MimeTypes, Tika также проверит ваш путь к классам для пользовательских определений типов mimetype и включит их.