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

Добавление Mimetypes в MimetypesFileTypeMap

У меня возникли проблемы с добавлением Mimetypes в MimetypesFileTypeMap. Я попытался добавить файл META-INF/mime.types, как это описано в Документация. но не похоже, что он читается MimetypesFileTypeMap.

Я что-то упустил?

Это веб-проект Spring/Maven. Любая помощь будет оценена!


Даже странная боковая точка. Прохожий (Andrew T.) проводил некоторое исследование типов MIME только на днях и обнаружил эту документацию в MimetypesFileTypeMap JavaDocs.


Порядок поиска файлов MIME:

MimetypesFileTypeMap выглядит в разных местах в пользовательской системе для файлов файлов MIME. Когда запросы выполняются для поиска MIME-типов в MimetypesFileTypeMap, он ищет файлы типов MIME в следующем порядке:

  • Программно добавленные записи в экземпляр MimetypesFileTypeMap.
  • Файл .mime.types в домашнем каталоге пользователя.
  • Файл <java.home>/lib/mime.types.
  • Файл или ресурсы с именем META-INF/mime.types.
  • Файл или ресурс с именем META-INF/mimetypes.default (обычно находится только в файле activation.jar). (А)

(A) Как показано кодом опубликованным jwrobel, Jar фактически кажется resources.jar по меньшей мере в двух системах (с JDKs).


Так что данный источник..

import java.io.File;
import javax.activation.MimetypesFileTypeMap;

class TestMime {
    public static void main(String[] args) {
        System.out.println(System.getProperty("java.version"));

        File f = new File(System.getProperty("java.home"), "lib");
        f = new File(f, "mime.types");
        System.out.println(f.exists() + " \t - " +f);

        f = new File(System.getProperty("user.home"), ".mime.types");
        System.out.println(f.exists() + " \t - " +f);

        MimetypesFileTypeMap mfm = new MimetypesFileTypeMap();
        System.out.println(mfm.getContentType("a.js"));
        System.out.println(mfm.getContentType("a.png"));
        System.out.println(mfm.getContentType("a.jpg"));
        System.out.println(mfm.getContentType("a.au"));
        System.out.println(mfm.getContentType("a.htm"));
    }
}

.. мы можем исключить "1" - программно добавлено. Мы также можем забыть 4 и 5, если мы запустим его из командной строки в каталоге без META-INF, no activation.jar на пути к классу. Который оставляет только варианты 2 и 3.

Но выход этого источника...

1.6.0
false    - C:\Program Files\Java\jdk1.6.0\jre\lib\mime.types
false    - C:\Users\Andrew\.mime.types
application/octet-stream
application/octet-stream
image/jpeg
audio/basic
text/html
Press any key to continue . . .

т.е. Результат false для обоих файлов, которые могут быть источником MIME-сопоставлений, показанных для строк файла, предлагает те два последних источника информации. не существует. Итак, где heck - информация, поступающая из?

4b9b3361

Ответ 1

Spring предоставляет класс оболочки, который поставляется с более обновленным списком типов MIME. Вы используете его почти так же, как вы бы использовали MimetypesFileTypeMap.

import org.springframework.mail.javamail.ConfigurableMimeFileTypeMap;
...
ConfigurableMimeFileTypeMap mimeMap = new ConfigurableMimeFileTypeMap();
String contentType = mimeMap.getContentType(uploadedName);//defaults to application/octet-stream

Ответ 2

Чтобы ответить Эндрю Томпсону, я думаю, что MimetypesFileTypeMap получает свои определения типа MIME по умолчанию из /lib/resources.jar:/META-INF/mimetypes.default.

Запуск этого кода из командной строки:

ClassLoader loader = Thread.currentThread().getContextClassLoader(); 
URL resource = loader.getResource("META-INF/mimetypes.default"); 
System.out.println(resource.getPath());

Урожайность

file:/usr/java/jdk1.6.0_22/jre/lib/resources.jar!/META-INF/mimetypes.default

MimetypesFileTypeMap использует ClassLoader.getResource() для загрузки типов сопоставлений по умолчанию.

Ответ 3

Вы можете добавить mimetype в MimetypesFileTypeMap в вашем Javacode

MimetypesFileTypeMap mimeType = new MimetypesFileTypeMap();
mimeType.addMimeTypes("application/pdf pdf");

Ключевая информация здесь - аргумент addMimeTypes должен быть "расширением mime_type", например: "application/pdf pdf", как показано выше.