我目前正面臨一個我覺得比有趣的問題:檢測給定文件的MIME類型。 通過檢測,我的意思是隻使用文件中存在的信息來猜測MIME類型。通過文件,我的意思是一個具有名稱和內容的結構。Mime類型檢測完成正確
這裏是我知道這個問題的解決方案:
- 試圖猜測根據文件名的文件類型。例如,如果文件名是
foo.txt
,我可以假設MIME類型是text/plain
- 嘗試使用內容確定類型,特別是通常包含某種魔術代碼的第一個字節。例如,如果文件以八位組號
0xCAFEBABE
開頭,那麼我可以假設MIME類型是application/x-java-class
。
這個問題的兩種解決方法都有其優點和缺點。
第一個解決方案非常高效,但我們假設該文件具有正確的名稱,並且具有擴展名。如何檢測名爲LICENSE
或README
的文件的MIME類型?
第二種技術有點複雜,必須實際讀取數據。它適用於所有包含魔術代碼的文件,但對其他文件效果不佳。可能會出現一些問題:如何區分MS-DOS EXE文件(以MZ
作爲魔術代碼開始)和以字母MZ
開頭的實際text/plain
文件之間的區別。當您考慮其他文件類型(txt
vs csv
; html
vs xml
vs xhtml
)時,許多類似的問題出現了。
因此,真正的問題來了: 如何有效和可靠地檢測MIME類型的文件?
一些旁註:
- 我知道很多很多圖書館的存在在那裏,做的工作。我對圖書館不感興趣。我有興趣弄髒我的手。
- 無特殊語言。我對通用算法感興趣,而不是特定的實現。
當然,最好的方法是將這些信息與數據一起存儲。 OS X使用[UTI](http://en.wikipedia.org/wiki/Uniform_Type_Identifier)執行此操作。但我認爲這沒有幫助? – You