我正在尝试读取所选文件的第一个字节。
但是,当我选择一个大文件(> 100Mb)时,会出现错误:“ NotReadableError”。
请参见下面的代码。“数组缓冲区”真的是缓冲区吗,还是只是将所有内容加载到内存中,而我必须使用file#slice?
function readFile(file) {
var reader = new FileReader();
reader.onload = function() {
var buffer = reader.result;
var view = new Int8Array(buffer);
try {
view.forEach(function(v, index, array) {
console.log(v);
alert("ok - " + v);
throw "BreakException";
})
} catch (e) {
if (e!=="BreakException") throw e;
}
}
reader.onerror = function() {
alert("error");
console.log(reader.error);
}
reader.readAsArrayBuffer(file);
}
var fileField = document.getElementById("file");
fileField.onchange = function(e) {
var file = e.target.files[0];
readFile(file);
}
Tamas Hegedu.. 5
ArrayBuffer实际上是一个缓冲区,一个内存中的缓冲区。缓冲区就是这样工作的。您的代码尝试将整个文件加载到内存中。要访问文件的特定范围而不将整个范围加载到内存中,必须按照怀疑的方式使用Blob.slice(文件实现Blob的所有方法)。
ArrayBuffer实际上是一个缓冲区,一个内存中的缓冲区。缓冲区就是这样工作的。您的代码尝试将整个文件加载到内存中。要访问文件的特定范围而不将整个范围加载到内存中,必须按照怀疑的方式使用Blob.slice(文件实现Blob的所有方法)。