我正在处理一个小文件上传脚本(学习经验),我注意到在选择微软办公室相关文件(例如.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>
答案 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在用户注册表中适当设置,您将获得空字符串。这几个小时很有趣:)