2012-06-25 24 views
9

我正在通過一個小文件上傳腳本(學習經驗),我注意到當選擇與Microsoft Office相關的文件時(例如.doc.docx)文件對象沒有指定類型:用Html5文件API確定未知內容類型

filelist

對於.doc文件我所預料的類型爲"application/msword",沿着思想的.docx的同一列火車是"application/vnd.openxmlformats-officedocument.wordprocessingml.document"

在無法確定類型的情況下,查看文件擴展名並將其與「預期的」內容/ MIME類型相匹配的正確操作過程?

示例腳本:

<div id="fileUpload"> 
    <input type="file" id="fileElem" style="display:none;" onchange="handleFiles(this.files)"/> 
    <a href="#" id="fileSelect">Select some files</a> 
</div> 

<script type="text/javascript"> 
    var fileSelect = document.getElementById("fileSelect"), 
     fileElem = document.getElementById("fileElem"); 

    fileSelect.addEventListener("click", function (e) { 

     if (fileElem) { 
      fileElem.click(); 
     } 

     e.preventDefault(); 
    }, false); 

    function handleFiles(files) { 
     console.log(files); 
    } 

</script> 

回答

12

按照W3文件阿比草擬類型attributte:

小寫的ASCII編碼字符串代表 斑點的媒體類型,表示爲RFC2046 MIME類型[RFC2046]。獲取時, 符合用戶代理應該返回Blob的MIME類型,如果它是 已知。如果一致的用戶代理不能確定Blob的媒體類型 ,它們務必返回空字符串。字符串是一個有效的MIME 類型,如果它在一節中定義RFC的3.7「媒體 類型」 2616

所以基本上媒體類型的令牌相匹配,如果它不是一個有效的或媒體類型的HTTP/1.1它將是空的。 反正。

是啊,你應該這樣做:

if(type === "") { 
    //Get extension and match to a MIME-types list. (http://www.htmlquick.com/es/reference/mime-types.html) 
} 
+0

這是一個有用的和mantained mime類型列表api。 https://github.com/stretchr/filetypes.js – netalex

+0

[Mime-type list](http://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types)from svn.apache.org。請參閱[PHP文檔評論](http://php.net/manual/en/function.mime-content-type.php#107798) – Bright

7

與接受的答案一致,但作爲一個供參考,以誰卡住了,爲什麼這是發生了一些,而不是其他的人(比如我)請注意,在Windows中,如果在用戶註冊表中沒有適當設置mime,則會得到空字符串。這是一個有趣的幾個小時:)