Почему MimetypesFileTypeMap всегда возвращает "application / octet-stream" для PNG-файла?

Я пытаюсь использовать javax.activation.MimetypesFileTypeMap чтобы получить тип содержимого.

для строки " image.png "он всегда возвращает" application / octect-stream"... разве он не должен возвращать что-то вроде "image/png" ?

javax.activation.MimetypesFileTypeMap.getDefaultFileTypeMap().getContentType("image.png");

3 ответов


см. Javadocs javax.activation.MimetypesFileTypeMap. Метод ищет файл с именем .mime.types в определенном порядке:

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

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

  1. программно добавить записи в экземпляр MimetypesFileTypeMap.
  2. файл .mime.types в домашнем каталоге пользователя.
  3. файл <java.home>/lib/mime.types.
  4. файл или ресурсы с именем META-INF/mime.types.
  5. файл или ресурс с именем META-INF/mimetypes.default (обычно встречается только в ).

если файл не найден, getContentType возвращает application/octet-stream:

возврат типа MIME на основе указанного имени файла. Записи типа MIME ищутся, как описано выше в разделе типы MIME порядок поиска файлов. Если запись не найдена, возвращается тип "application/octet-stream".


для получения contentType вы можете использовать

public String getFileContentType(String fileName) {
    String fileType = "Undetermined";
    final File file = new File(fileName);
    try
    {
        fileType = Files.probeContentType(file.toPath());
    }
    catch (IOException ioException)
    {
        System.out.println(
                "ERROR: Unable to determine file type for " + fileName
                        + " due to exception " + ioException);
    }
    return fileType;
}

я улучшил MimetypesFileTypeMap (проверка типа контента слишком медленная для веб-служб):

package com.github.jjYBdx4IL.utils.text;

import java.io.IOException;
import java.io.InputStream;

import javax.activation.MimetypesFileTypeMap;

//CHECKSTYLE:OFF
public class MimeType {

    public static MimetypesFileTypeMap MAP = createMap();

    /**
     * 
     * @return a vastly improved mimetype map
     */
    public static MimetypesFileTypeMap createMap() {
        try (InputStream is = MimeType.class.getResourceAsStream("mimetypes.txt")) {
            return new MimetypesFileTypeMap(is);
        } catch (IOException ex) {
            throw new RuntimeException(ex);
        }
    }

    public static String get(String fileName) {
        return get(fileName, null);
    }

    public static String get(String fileName, String charset) {
        String mimeType = MAP.getContentType(fileName.toLowerCase());
        if (charset != null && (mimeType.startsWith("text/") || mimeType.contains("javascript"))) {
            mimeType += ";charset=" + charset.toLowerCase();
        }
        return mimeType;
    }


}

https://github.com/jjYBdx4IL/misc/blob/master/text-utils/src/main/java/com/github/jjYBdx4IL/utils/text/MimeType.java

application/javascript js
application/msword doc docx docm
application/pdf pdf
application/postscript ai eps ps
application/rss+xml rss
application/rtf rtf
application/vnd.ms-excel xls xlsx xlsm XLS
application/vnd.ms-powerpoint ppt pps pot pptx pptm
application/vnd.oasis.database odb
application/vnd.oasis.opendocument.text odt
application/vnd.oasis.presentation odp
application/vnd.oasis.spreadsheet ods
application/vnd.oasis.text odt
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet xlsx
application/vnd.openxmlformats-officedocument.wordprocessingml.document docx
application/x-awk awk
application/x-blender blend
application/x-cd-image iso
application/x-compress zip gz tar rar
application/x-deb deb
application/x-font-otf otf OTF
application/x-font-ttf ttf TTF
application/x-java-applet class
application/x-java-archive jar
application/xml xml
application/x-ms-dos-executable exe msi
application/x-perl pl
application/x-php php
application/x-rpm rpm
application/x-sharedlib o
application/x-shellscript sh
application/x-tar tar
application/x-texinfo texinfo texi
application/x-tex tex
application/x-trash autosave
application/x-troff t tr roff
application/x-vnd.oasis.opendocument.spreadsheet ods
application/zip zip
audio/ac3 ac3
audio/basic au
audio/midi midi mid
audio/mpeg mp3 mpeg3
audio/x-aifc aifc
audio/x-aiff aif aiff
audio/x-generic wav wma mp3 ogg
audio/x-mpeg mpeg mpg
audio/x-wav wav
image/gif gif GIF
image/ief ief
image/jpeg jpeg jpg jpe JPG
image/png png PNG
image/svg+xml svg svgz
image/tiff tiff tif
image/x-eps eps
image/x-generic bmp jpg jpeg png tif tiff xpm wmf emf
image/x-xwindowdump xwd
text/css css
text/csv csv
text/html html htm HTML HTM
text/plain txt text TXT TEXT
text/richtext rtx
text/rtf rtf
text/tab-separated-values tsv tab
text/x-bibtex bib
text/x-c++hdr h
text/x-csrc c
text/x-c++src cpp c++
text/x-java java
text/x-log log
text/xml xml XML osm
text/x-pascal pas
text/x-po po pot
text/x-python py
text/x-sql sql
text/x-tcl tcl
text/x-tex tex
video/mpeg mpeg mpg mpe mpv vbs mpegv
video/msvideo avi
video/quicktime qt mov moov
video/x-generic wmv mpeg mp4 ogv swf mov dvd osp
video/x-msvideo avi

https://github.com/jjYBdx4IL/misc/blob/master/text-utils/src/main/resources/com/github/jjYBdx4IL/utils/text/mimetypes.txt

Я просто собрал все, что мог быстро узнать там через Google, поэтому я не могу сказать, действительно ли все эти типы действительны.