2010-12-03 31 views
12

Je cherche une bibliothèque java qui vous indique le type mime en regardant le contenu du fichier (tableau d'octets). J'ai trouvé ce projet en utilisant jmimemagic et il ne supporte plus les nouveaux types de fichiers (par exemple, le format MS Word docx) car il est inactif maintenant (à partir de 2006).bibliothèque java pour trouver le type mime à partir du contenu du fichier

+3

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

+1

Je ne pense pas que ce soit un doublon à la question référencée parce que l'auteur demande explicitement détection par le contenu du fichier alors que les solutions pour l'autre question se réfèrent à un fichier (nom de fichier inclus). – danielp

+0

Qu'en est-il des solutions [ici] (http://www.rgagnon.com/javadetails/java-0487.html). Ne travaillent-ils pas pour vous? – javamonkey79

Répondre

5

Utilisez Apache tika pour la détection de contenu. Veuillez trouver le lien ci-dessous. http://tika.apache.org/0.8/detection.html. Nous avons tant de dépendances de pot que vous pouvez trouver lorsque vous créez tika en utilisant maven

 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

Peut-être utile pour quelqu'un qui a besoin de formats de bureau les plus utilisés aussi bien (et ne pas utiliser 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

Vous n'avez aucune idée de combien de temps j'ai cherché un exemple de ceci. Merci beaucoup! – Mike

+0

Cela m'a juste sauvé un temps démesuré pour mettre à jour une de mes applications afin de reconnaître correctement les nouvelles extensions MS Office! Merci! – Saggio

+0

Je devais changer 'if (! StringUtils.hasText (contentType)) {' en '(StringUtils.isBlank (contentType)) {'. Merci pour le codez! –

2

J'utilise javax.activation.MimetypesFileTypeMap. Il commence par un petit ensemble: $JRE_HOME/lib/content-types.properties, mais vous pouvez ajouter vous-même. Créer un fichier mime.types dans le format indiqué dans javadoc MimetypesFileTypeMap (j'ai commencé avec une grande liste sur le net, massé, et ajouté les types que j'ai trouvé manquant). Maintenant, vous pouvez ajouter cela dans votre code en ouvrant votre fichier mime.types et en ajoutant son contenu à votre carte. Cependant, la solution la plus simple consiste à ajouter votre fichier mime.types au META-INF de votre pot. java.activation le ramassera automagiquement.