这是一段代码,通过检查所需的 幻数 来检查上传的图像mime类型(我仍然不清楚它们)。当我向uint8Array提供blob文件时它工作,数组填充。但是如果我使用uint16array则会出错。可能是造成此错误的原因。它说无效的论点。
我对这个话题有两个问题。
1。为什么我不能用uint16array代替uint8array?
2。我读维基百科。但它包含许多技术内容。你能否对“神奇数字”有所了解,以便我能理解它的真实含义(简而言之)
var upload=document.getElementById('upload');
upload.addEventListener('change',function(e){
if(window.File && window.FileReader && window.FileList){
var file=e.target.files[0];
console.log(file.type);
var fileReader=new FileReader();
fileReader.onload= function(e){
var arr = (new Uint8Array(e.target.result));
console.log(arr);
var arr2=(new Uint16Array(e.target.result));
console.log(arr2);
};
fileReader.readAsArrayBuffer(file);
}else{
alert('file api not compatible with your browser');
}
});
答案 0 :(得分:0)
您不能在此处使用Uint16Array,因为该文件具有奇数个字节。根据确定,Uint16Array需要偶数个字节(2的倍数)。
另外,我不太清楚它的用途是什么。 Unit16Array以平台字节顺序读取数据,这将导致根据平台的不同结果。你绝对可以用字节检查一个神奇的数字。
幻数只是给定位置(通常在文件的最开头)的字节序列,它允许人们识别文件类型。当然,幻数的存在不足以使文件成为识别格式的有效文件,但它的缺失肯定排除了所需类型的文件(对于包含幻数的文件类型,这不是所有人都必须如此)。