2015-12-08 17 views
5

我試圖使用javax.activation.MimetypesFileTypeMap來獲取內容類型。爲什麼MimetypesFileTypeMap總是返回PNG文件的「application/octet-stream」?

對於字符串「image.png」,它總是返回「application/octect-stream」...不應該返回類似「image/png」的東西嗎?

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

請參閱http://stackoverflow.com/questions/51438/getting-a-files-mime-type-in​​-java。 – manouti

回答

4

查看javax.activation.MimetypesFileTypeMap的Javadocs。該方法查找一個按照一定的順序叫.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(通常只在activation.jar文件中找到)。

如果沒有找到文件,getContentType方法返回application/octet-stream

返回基於指定文件名的MIME類型。按照MIME類型文件搜索順序的描述搜索MIME類型條目。如果未找到條目,則返回「application/octet-stream」類型。

1

爲了得到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; 
} 
0

我在MimetypesFileTypeMap中改善(內容類型探測太慢了Web服務):

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快速找到的東西放在一起,所以我不能說所有這些類型是否都是有效的。

相關問題