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

Как определить соответствующее расширение файла из MIME Type в Java

Я загружаю файлы в ведро Amazon s3 и имею доступ к InputStream и String, содержащим тип MIME файла, но не оригинальное имя файла. Мне нужно создать имя файла и расширение, прежде чем нажимать файл до S3. Есть ли библиотека или удобный способ определения соответствующего расширения для использования с типом MIME?

Я видел некоторые ссылки на библиотеку Apache Tika, но это похоже на overkill, и я еще не смог получить его для успешного обнаружения расширений файлов. Из того, что мне удалось собрать, кажется, что этот код должен работать, но я просто получаю пустую строку, когда моя переменная типа "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
    }
4b9b3361

Ответ 1

Как отмечают некоторые комментаторы, универсального сопоставления 1:1 между mimetypes и расширениями файлов... Некоторые типы mimetypes имеют более одного возможного расширения, многие расширения разделяются несколькими типами mimetypes, а некоторые типы mimetypes не имеют расширение.

По возможности, вам намного лучше хранить mimetype и использовать это в будущем и забывать о расширении.

Тем не менее, если вы хотите получить наиболее распространенное расширение файла для заданного типа mimetype, то Tika - хороший способ пойти. Apache Tika имеет очень большой набор миметиков, о которых он знает, и для многих из них он также знает магию магии для обнаружения, общих расширений, описаний и т.д..

Если вы хотите получить наиболее распространенное расширение для файла JPEG, то, как показано в этот Apache Tika unit test, вам просто нужно сделайте что-нибудь вроде:

  MimeTypes allTypes = MimeTypes.getDefaultMimeTypes();
  MimeType jpeg = allTypes.forName("image/jpeg");
  String jpegExt = jpeg.getExtension(); // .jpg
  assertEquals(".jpg", jpeg.getExtension());

Главное, что вам нужно загрузить файл xml, который входит в банку Tika, чтобы получить определения всех типов mimetypes. Если вы, возможно, имеете дело с настраиваемыми типами mimetypes, то Tika поддерживает их и меняет одну строку:

  TikaConfig config = TikaConfig.getDefaultConfig();
  MimeTypes allTypes = config.getMimeRepository();

Используя метод TikaConfig для получения MimeTypes, Tika также проверит ваш путь к классам для пользовательских настроек mimetype и включит их.