2010-12-03 32 views
12

私はファイルの内容(バイト配列)を見て、あなたにMIMEタイプを知らせるJavaライブラリを探しています。私はこのプロジェクトがjmimemagicを使っているのを発見しました。そして、それは現在(2006年以降)非アクティブなので、新しいファイルタイプ(例えばMS word docxフォーマット)をサポートしなくなりました。ファイルの内容からMIMEタイプを見つけるためのJavaライブラリ

+3

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

+1

著者が明示的に尋ねるので、これは参照された質問と重複しているとは思わない他の質問の解決策はファイル(包括的なファイル名)を参照します。 – danielp

+0

[こちら](http://www.rgagnon.com/javadetails/java-0487.html)のソリューションはどうですか?彼らはあなたのために働いていないのですか? – javamonkey79

答えて

5

コンテンツ検出にApache tikaを使用します。以下のリンクを見つけてください。 http://tika.apache.org/0.8/detection.html。私たちは、あなたが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); 
だけでなく、最も使用されるOffice形式を必要とする(とApacheティカを使用していない)誰かのために多分便利
9

を使用してティカを構築するときに見つけることができるので、多くのjarファイルの依存関係を持っている:

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

これの例を探していたのはいつまでもわからない。どうもありがとう! – Mike

+0

これはちょうど新しいMS Office拡張を正しく認識するために私のアプリケーションの1つをアップデートするのに過度の時間を節約しました!ありがとう! – Saggio

+0

if(!StringUtils.hasText(contentType)){'を' if(StringUtils.isBlank(contentType)){'に変更しなければなりませんでした。 codezありがとう! –

2

私はjavax.activation.MimetypesFileTypeMapを使用します。それは小さいセットで始まります:$JRE_HOME/lib/content-types.properties、しかしあなた自身を加えることができます。ファイルmime.typesMimetypesFileTypeMapのjavadocで表示される形式で作成します(私はネットから大量のリストを作成し、マッサージして追加したタイプを追加しました)。これで、コードにmime.typesファイルを開き、その内容をマップに追加することで追加できます。しかし、簡単な解決策は、mime.typesファイルを自分のjarファイルのMETA-INFに追加することです。 java.activationはそれを自動的に取り上げます。

関連する問題