【发布时间】:2018-06-28 16:07:09
【问题描述】:
我正在检查 mime 类型验证使用幻数文件类型的十六进制值但它不起作用它无法检查并且 返回错误的警告信息,即使文件有正确的十六进制值作为标题。
以下是代码中的详细信息:
jQuery(document).ready(function() {
jQuery.fn.hasMimetype = function(ctrl) {
try {
ctrl.value = null;
} catch(ex) { }
if (ctrl.value) {
ctrl.parentNode.replaceChild(ctrl.cloneNode(true), ctrl);
}
}
const fileSelector2 = document.getElementById('file')
jQuery('#file').change(function(event) {
const file = event.target.files[0]
//alert(file.type);
const filereader = new FileReader()
filereader.onloadend = function(evt) {
var header2 = "";
var arr = (new Uint8Array(evt.target.result)).subarray(0, 4);
for(var i = 0; i < arr.length; i++) {
header2 += arr[i].toString(16);
}
if(header2 !=='d0cf11e0' || header2 !=='504b34'){
alert(header2);
alert("only doc/docx files are supported");
$('#file').hasMimetype(fileSelector2);
}
}
filereader.readAsArrayBuffer(file);
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="file" id="file" name="file" />
【问题讨论】:
-
在我看来,随意将一些文本加粗不利于可读性。
-
我在这里用粗体突出了核心问题
-
那么它会产生什么十六进制字符串呢?实际字节数是多少?
-
它为 doc 和 docx 文件返回 d0cf11e0 和 504b34 但如果我上传 doc 或 docx 文件,它仍然显示错误消息
-
其实在我看来,适当的标点符号(句号、逗号)和大写(
I,而不是i)会更容易阅读。
标签: javascript file validation mime-types filereader