12

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

文件列表

对于 .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>
4

2 回答 2

15

根据 W3 File Api Draft 类型属性:

小写的 ASCII 编码字符串,表示 Blob 的媒体类型,表示为 RFC2046 MIME 类型 [RFC2046]。在获取时,符合标准的用户代理应该返回 Blob 的 MIME 类型,如果它是已知的。如果符合标准的用户代理无法确定 Blob 的媒体类型,它们必须返回空字符串。如果字符串与 RFC 2616 的第 3.7 节“媒体类型”中定义的媒体类型令牌匹配,则该字符串是有效的 MIME 类型

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

是的,你应该这样做:

if(type === "") {
  //Get extension and match to a MIME-types list. (http://www.htmlquick.com/es/reference/mime-types.html)
}
于 2012-06-25T03:10:46.403 回答
11

同意接受的答案,但作为对某人(如我)的仅供参考,他们对为什么某些特定文件类型会发生这种情况而不是其他特定文件类型会发生这种情况,请注意,在 Windows 中,如果未正确设置 mime用户注册表,您将得到空字符串。那是一个有趣的几个小时:)

于 2014-12-11T06:01:58.547 回答