2009-05-20 119 views
0

假設您有一個帶有'file'類型輸入標籤的html表單。當文件發佈到服務器時,它將與相關的元數據一起存儲在本地。確定HTTP文件上傳的MIME類型的最佳方法是什麼?

我能想到的三種方法來確定mime類型:

  • 使用在 '的multipart/form-data的' 有效載荷提供的mime類型。
  • 使用「multipart/form-data」有效內容中提供的文件名並根據文件擴展名查找MIME類型。
  • 掃描原始文件數據並使用MIME類型猜測庫。

這些解決方案都不是完美的。

哪一個是最準確的解決方案?
有沒有更好的選擇?

回答

1

如果你正在使用PHP,那麼你可以使用

http://pecl.php.net/package/Fileinfo

這將檢查文件的許多方面。對於Python你可以使用

http://pypi.python.org/pypi/python-magic/0.1

這是在Linux/Unix的libmagic綁定和可能的Windows?系統。參見:

man magic 
man libmagic 

在Linux上。它使用幻數測試來嘗試和聲明MIME類型的文件。

我喜歡神奇數字方法,因爲它可以捕捉錯誤的擴展名和很多詭計,如果您正在處理上傳的網絡服務器上的文件。這些測試通常是一次性的,因此通過文件讀取的性能可以忽略不計。

1

我不認爲你可以依靠任何一個作爲確定「我是mime類型x」。前兩個問題是,由於客戶端(瀏覽器或其他)的問題或來自各種客戶端的誤導性請求(各種黑客攻擊等),所提供的內容類型可能不正確。

因此,您應該嘗試並結合每種類型的信息並計算出某種置信度。如果文件擴展名爲.doc,MIME類型爲application/msword,那麼這是一個很好的機會,它是一個word文檔,但是通過MIME類型檢測實用程序運行它只是爲了確保。

應該有一個解決方案可用於使用您正在使用的語言進行MIME魔法檢測 - 但您沒有提及哪一個。它們通常都是通過查看文件的前幾個字節/字符並將它們與MIME類型的查找表進行匹配。有些還從文件中刪除BOM以幫助完成此操作。如果無法檢測到MIME類型,它們通常會回到純文本。

如果你想有一個獨立於平臺的方式來這再看看現有的各種Java庫:

相關問題