这是一段代码,通过检查所需的幻数来检查上载的图像mime类型(我仍然不太清楚它们)。当我将blob文件提供给uint8Array时,该数组就会填充。但是,如果我使用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');
}
});
最佳答案
您不能在此处使用Uint16Array,因为该文件的字节数为奇数。确切地说,Uint16Array需要偶数个字节(2的倍数)。
另外,我不太确定它会达到什么目的。 Unit16Array以平台字节顺序读取数据,这将导致不同的结果,具体取决于平台。而且您可以肯定地检查带有字节的幻数。
幻数只是在给定位置(通常在文件的最开始)的字节序列,它使人们可以识别文件类型。当然,幻数的存在不足以使文件成为可识别格式的有效文件,但是如果没有幻数,则绝对排除文件为必需类型(对于包含幻数的文件类型,则不是所有这些都是必然的)。
关于javascript - 使用uint8和uint16数组将图像读取为arraybuffer,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34225642/