2015-12-08 17 views
5

Sto cercando di utilizzare javax.activation.MimetypesFileTypeMap per ottenere il tipo di contenuto.Perché MimetypesFileTypeMap restituisce sempre "application/octet-stream" per il file PNG?

Per la stringa "image.png" restituisce sempre "application/octect-stream" ... non dovrebbe restituire qualcosa come "image/png"?

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

Vedere http://stackoverflow.com/questions/51438/getting-a-files-mime-type-in-java. – manouti

risposta

4

Vedere i Javadoc di javax.activation.MimetypesFileTypeMap. Il metodo sembra un file chiamato .mime.types in un certo ordine:

MIME tipi di ricerca di file ordine:

Il MimetypesFileTypeMap appare in vari luoghi nel sistema dell'utente per i tipi di file MIME voci. Quando le richieste sono fatte per la ricerca di tipi MIME nel MimetypesFileTypeMap, esso cerca i file tipi MIME nel seguente ordine:

  1. voci di programmazione aggiunti all'istanza MimetypesFileTypeMap.
  2. Il file .mime.types nella home directory dell'utente.
  3. Il file <java.home>/lib/mime.types.
  4. Il file o le risorse META-INF/mime.types.
  5. Il file o la risorsa META-INF/mimetypes.default (di solito si trova solo nel file activation.jar).

Se non viene trovato alcun file, getContentType metodo restituisce application/octet-stream:

Ritorna il tipo MIME in base al nome del file specificato. Le voci del tipo MIME vengono ricercate come descritto sopra in Ordine di ricerca dei file di tipi MIME. Se non viene trovata alcuna voce, viene restituito il tipo "application/octet-stream".

1

Per ottenere contentType è possibile utilizzare

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

ho migliorato MimetypesFileTypeMap (il tipo di contenuto di sondaggio è troppo lento per i servizi 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

Ho appena buttato insieme tutto ciò che potevo trovare rapidamente tramite Google, quindi non posso dire se tutti questi tipi siano effettivamente validi.