Почему 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 в следующем порядке:
- программно добавить записи в экземпляр MimetypesFileTypeMap.
- файл
.mime.types
в домашнем каталоге пользователя.- файл
<java.home>/lib/mime.types
.- файл или ресурсы с именем
META-INF/mime.types
.- файл или ресурс с именем
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;
}
}
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
Я просто собрал все, что мог быстро узнать там через Google, поэтому я не могу сказать, действительно ли все эти типы действительны.