簡體   English   中英

確定HTTP文件上傳的MIME類型的最佳方法是什么?

[英]What is the best way to determine the mime type of an http file upload?

假設您有一個HTML表單,其輸入標簽的類型為“文件”。 將文件發布到服務器后,它將與相關元數據一起存儲在本地。

我可以想到三種確定MIME類型的方法:

  • 使用“ multipart / form-data”有效載荷中提供的mime類型。
  • 使用“ multipart / form-data”有效負載中提供的文件名,並根據文件擴展名查找mime類型。
  • 掃描原始文件數據並使用mime類型猜測庫。

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

哪個是最准確的解決方案?
還有其他更好的選擇嗎?

如果您使用的是PHP,則可以使用

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

它將檢查文件的許多方面。 對於Python,您可以使用

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

在Linux / Unix和Windows上,libmagic的綁定是什么? 系統。 看到:

man magic
man libmagic

在Linux上。 它使用幻數測試來嘗試並確定文件的mime類型。

我喜歡魔術數字方法,因為如果您在上傳的Web服務器上處理文件,它可能會捕獲錯誤的擴展名和很多技巧。 這些測試通常是一次性的,因此通過文件讀取對性能的影響可以忽略不計。

我認為您不能依靠其中任何一個作為確定的“我是啞劇類型x”。 前兩個的問題是,由於客戶端(瀏覽器或其他)的問題或來自各個客戶端的誤導性請求(各種黑客嘗試等),提供的內容類型可能不正確。

因此,您可能應該嘗試合並每種類型的信息,並得出某種置信度。 如果文件擴展名為.doc,且MIME類型為application / msword,則很有可能是word文檔,但可以通過MIME類型檢測實用程序運行它以確保。

應該有一種使用您使用的語言進行mime魔術檢測的解決方案-盡管您沒有提到哪一種。 它們通常都通過查看文件的前幾個字節/字符來工作,並將它們與mime類型的查找表進行匹配。 有些人還從文件中刪除了BOM,以幫助解決這個問題。 如果無法檢測到啞劇類型,它們通常會退回到純文本格式。

如果您想要一種獨立於平台的方法,那么請看一下存在的各種Java庫:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM