2010-12-03 6 views
12

Ich suche nach einer Java-Bibliothek, die Sie den Mime-Typ durch Betrachten des Dateiinhalts (Byte-Array). Ich habe dieses Projekt mit jmimemagic gefunden und es unterstützt keine neueren Dateitypen (zB MS Word docx Format), da es jetzt inaktiv ist (ab 2006).Java-Bibliothek, um den MIME-Typ von Dateiinhalt zu finden

+3

http://sourceforge.net/projects/mime-util/files/mime-util/mime-util-2.1.3/ – khachik

+1

Ich glaube nicht, dass dies ein Duplikat zu der referenzierten Frage, weil der Autor explizit fragt Erkennung durch den Dateiinhalt, während die Lösungen für die andere Frage auf eine Datei (inklusive Dateiname) verweisen. – danielp

+0

Was ist mit den Lösungen [hier] (http://www.rgagnon.com/javadetails/java-0487.html). Arbeiten sie nicht für dich? – javamonkey79

Antwort

5

Verwenden Sie Apache Tika zur Inhaltserkennung. Bitte finden Sie den folgenden Link. http://tika.apache.org/0.8/detection.html. Wir haben so viele jar Abhängigkeiten, die Sie finden können, wenn Sie tika Maven bauen

 ByteArrayInputStream bai = new ByteArrayInputStream(pByte); 
     ContentHandler contenthandler = new BodyContentHandler(); 
     Metadata metadata = new Metadata(); 
     Parser parser = new AutoDetectParser(); 
     try { 
       parser.parse(bai, contenthandler, metadata); 

     } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
     } catch (SAXException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
     } catch (TikaException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
     }   
     System.out.println("Mime: " + metadata.get(Metadata.CONTENT_TYPE)); 
     return metadata.get(Metadata.CONTENT_TYPE); 
9

Vielleicht nützlich für jemanden, der auch die am häufigsten verwendeten Office-Formate benötigt (und nicht verwendet Apache Tika):

public class MimeTypeUtils { 

    private static final Map<String, String> fileExtensionMap; 

    static { 
     fileExtensionMap = new HashMap<String, String>(); 
     // MS Office 
     fileExtensionMap.put("doc", "application/msword"); 
     fileExtensionMap.put("dot", "application/msword"); 
     fileExtensionMap.put("docx", "application/vnd.openxmlformats-officedocument.wordprocessingml.document"); 
     fileExtensionMap.put("dotx", "application/vnd.openxmlformats-officedocument.wordprocessingml.template"); 
     fileExtensionMap.put("docm", "application/vnd.ms-word.document.macroEnabled.12"); 
     fileExtensionMap.put("dotm", "application/vnd.ms-word.template.macroEnabled.12"); 
     fileExtensionMap.put("xls", "application/vnd.ms-excel"); 
     fileExtensionMap.put("xlt", "application/vnd.ms-excel"); 
     fileExtensionMap.put("xla", "application/vnd.ms-excel"); 
     fileExtensionMap.put("xlsx", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); 
     fileExtensionMap.put("xltx", "application/vnd.openxmlformats-officedocument.spreadsheetml.template"); 
     fileExtensionMap.put("xlsm", "application/vnd.ms-excel.sheet.macroEnabled.12"); 
     fileExtensionMap.put("xltm", "application/vnd.ms-excel.template.macroEnabled.12"); 
     fileExtensionMap.put("xlam", "application/vnd.ms-excel.addin.macroEnabled.12"); 
     fileExtensionMap.put("xlsb", "application/vnd.ms-excel.sheet.binary.macroEnabled.12"); 
     fileExtensionMap.put("ppt", "application/vnd.ms-powerpoint"); 
     fileExtensionMap.put("pot", "application/vnd.ms-powerpoint"); 
     fileExtensionMap.put("pps", "application/vnd.ms-powerpoint"); 
     fileExtensionMap.put("ppa", "application/vnd.ms-powerpoint"); 
     fileExtensionMap.put("pptx", "application/vnd.openxmlformats-officedocument.presentationml.presentation"); 
     fileExtensionMap.put("potx", "application/vnd.openxmlformats-officedocument.presentationml.template"); 
     fileExtensionMap.put("ppsx", "application/vnd.openxmlformats-officedocument.presentationml.slideshow"); 
     fileExtensionMap.put("ppam", "application/vnd.ms-powerpoint.addin.macroEnabled.12"); 
     fileExtensionMap.put("pptm", "application/vnd.ms-powerpoint.presentation.macroEnabled.12"); 
     fileExtensionMap.put("potm", "application/vnd.ms-powerpoint.presentation.macroEnabled.12"); 
     fileExtensionMap.put("ppsm", "application/vnd.ms-powerpoint.slideshow.macroEnabled.12"); 
     // Open Office 
     fileExtensionMap.put("odt", "application/vnd.oasis.opendocument.text"); 
     fileExtensionMap.put("ott", "application/vnd.oasis.opendocument.text-template"); 
     fileExtensionMap.put("oth", "application/vnd.oasis.opendocument.text-web"); 
     fileExtensionMap.put("odm", "application/vnd.oasis.opendocument.text-master"); 
     fileExtensionMap.put("odg", "application/vnd.oasis.opendocument.graphics"); 
     fileExtensionMap.put("otg", "application/vnd.oasis.opendocument.graphics-template"); 
     fileExtensionMap.put("odp", "application/vnd.oasis.opendocument.presentation"); 
     fileExtensionMap.put("otp", "application/vnd.oasis.opendocument.presentation-template"); 
     fileExtensionMap.put("ods", "application/vnd.oasis.opendocument.spreadsheet"); 
     fileExtensionMap.put("ots", "application/vnd.oasis.opendocument.spreadsheet-template"); 
     fileExtensionMap.put("odc", "application/vnd.oasis.opendocument.chart"); 
     fileExtensionMap.put("odf", "application/vnd.oasis.opendocument.formula"); 
     fileExtensionMap.put("odb", "application/vnd.oasis.opendocument.database"); 
     fileExtensionMap.put("odi", "application/vnd.oasis.opendocument.image"); 
     fileExtensionMap.put("oxt", "application/vnd.openofficeorg.extension"); 
    } 

    public static String getContentTypeByFileName(String fileName) { 
     // 1. first use java's buildin utils 
     FileNameMap mimeTypes = URLConnection.getFileNameMap(); 
     String contentType = mimeTypes.getContentTypeFor(fileName); 
     // 2. nothing found -> lookup our in extension map to find types like ".doc" or ".docx" 
     if (!StringUtils.hasText(contentType)) { 
      String extension = FilenameUtils.getExtension(fileName); 
      contentType = fileExtensionMap.get(extension); 
     } 
     return contentType; 
    } 
} 
+0

Sie haben keine Ahnung, wie lange ich nach einem Beispiel gesucht habe. Danke vielmals! – Mike

+0

Das hat mir gerade viel Zeit gespart, um eine meiner Anwendungen zu aktualisieren, um die neueren MS Office-Erweiterungen richtig zu erkennen! Vielen Dank! – Saggio

+0

Ich musste 'if (! StringUtils.hasText (contentType)) {' in 'if (StringUtils.isBlank (contentType)) {' ändern. Danke für den Codez! –

2

Ich verwende . Es beginnt mit einem kleinen Satz: $JRE_HOME/lib/content-types.properties, aber Sie können Ihre eigenen hinzufügen. Erstelle eine Datei mime.types im Format MimetypesFileTypeMap 's javadoc (Ich begann mit einer großen Liste aus dem Netz, massierte es und fügte Typen hinzu, die ich fehlte). Jetzt können Sie das in Ihrem Code hinzufügen, indem Sie Ihre mime.types Datei öffnen und ihren Inhalt zu Ihrer Karte hinzufügen. Die einfachere Lösung besteht jedoch darin, Ihre mime.types Datei zu der META-INF Ihres Glases hinzuzufügen. java.activation wird das automatisch abholen.

Verwandte Themen