2007年10月30日

Java 怎麼判斷檔案的 ContentType/MIME-Type, Part II

Java 怎麼判斷檔案的 ContentType/MIME-Type 一文中我們談論到了兩種 Java 用來檢測檔案類型的方式,當時為了保險起見我使用了 JMimeMagic 這個套件庫。

然後前兩天看到有個 bmp 檔想要下載,結果 JMimeMagic 噴出了一大串的例外訊息,大意是指它檢查了半天後發現其實他不認識 bmp 這類的檔案,所以只好傳了一個 null 回來。

這真是令人訝異啊,沒想到最早期的 bmp 檔竟然會不被 JMmieMagic 所認識?問題雖然很嚴重但還是得馬上進行緊急修改:只要發現 JMimeMagic 傳回 null 時就塞 application/octet-stream 就算解決了問題。但這終究只是暫行方案,最好的方式還是想辦法識別出檔案真正的類型比較適當。

所幸在原文中所提到的參考網站中又新增了第三種檢測方式:使用 Mime-Util 套件庫。它和 JMimeMagic 都是透過識別檔案特徵的方式進行檢測、判別。

使用的方式不需要做太多預先設定,只要直接把待測檔案路徑丟進去就行了,如:

File myFile = new File( "./test.bmp" );
/* 
 * 雖然 MimeUtil.getMimeType() 可以直接傳入 File 物件,但是
 * 不知何故在 Tomcat 5.5.23 at Fedora Core 6 with JDK 1.5 
 * 的環境中會失效。改成直接傳入檔案路徑後即可正常進行檢測。
 */
String contentType = MimeUtil.getMimeType( myFile.getCanonicalPath();
System.out.println( contentType );

最後,在我的機器上不管是 IE6 還是 Firefox 2 都無法直接開啟 .bmp 檔,這… 我不太相信會這樣,該不會是到了系統重灌的時候了?