使用Html5文件api确定未知内容类型

时间:2012-06-25 02:50:58

标签: javascript html5 file-upload

我正在处理一个小文件上传脚本(学习经验),我注意到在选择微软办公室相关文件(例如.doc.docx)时,文件对象没有类型指定:

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>

2 个答案:

答案 0 :(得分:15)

根据W3文件Api草案的类型归属:

  

小写的ASCII编码字符串,表示媒体类型   Blob,表示为RFC2046 MIME类型[RFC2046]。在得到,   符合要求的用户代理应该返回Blob的MIME类型(如果是)   众所周知。如果符合要求的用户代理无法确定媒体类型   Blob,他们必须返回空字符串。字符串是有效的MIME   如果它匹配3.7节“媒体”中定义的媒体类型令牌,则键入   “RFC 2616的类型

所以基本上,如果它不是HTTP / 1.1的有效或媒体类型,它将是空的。 反正。

是的,你应该做点什么:

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

答案 1 :(得分:11)

同意接受的答案,但作为对某人(像我一样)的一个FYI,因为为某些人而不是其他人针对特定文件类型发生了这种情况,请注意在Windows中,如果mime不是&#39 ; t在用户注册表中适当设置,您将获得空字符串。这几个小时很有趣:)