我正在使用的某些文件大于1 GB,因此我无法像XMLHttpRequest一样一次读取整个文件。我需要使用与Chromium兼容的某种流来阅读它。
Fetch API是否能够读取计算机上的本地文件?如果是这样,我如何将流与Fetch API一起使用,以类似于XMLHttpRequest的方式读取文本和二进制文件。
侧面说明:我已成功使用XMLHttpRequest在本地读取二进制和文本文件。我正在使用CEFSharp,并且暂时禁用了Web安全。该程序永远不会连接到网络,因此它是否具有安全性无关紧要。
到目前为止,我还没有做很多事情,但是我尝试仅读取一个简单的文本和一个简单的json文件,以查看是否能够在本地读取。但是我还没有成功。
这是我尝试过的代码。
fetch('/example_1.json',myInit)
.then(function(response) {
return response.text();
})
.then(function(data) {
alert(data);
})
.catch(function(error){
alert(error);
});
我不断收到“ TypeError:无法提取”
我希望在警报消息中看到文件的某些文本,以告诉我可以使用Fetch在本地读取。
编辑:我找到了解决方案。不幸的是,该副本无法回答我的问题。
我发现您可以使用XMLHttpRequest模拟“类似流”的行为。
您必须设置范围标头以请求一定数量的字节
let promise = new Promise((resolve, reject) => {
var xhr = new XMLHttpRequest();
xhr.open("GET", file, true);
xhr.responseType = "arraybuffer";
xhr.setRequestHeader("Range", "bytes=" + start + "-" + (end-1));
xhr.onreadystatechange = function () {
if(xhr.readyState == 4 && (xhr.status == 200 || xhr.status == 0)){
resolve(xhr.response);
}
};
xhr.send();
});
let arrayBuffer = await promise;
由于我的项目是一个遗留项目,因此它使我无法正确使用诸如node.js之类的工具。相反,这现在可以正常工作。