如何使用Stream读取Javascript中的本地文件

时间:2019-07-09 13:56:22

标签: javascript html fetch cefsharp

我正在使用的某些文件大于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之类的工具。相反,这现在可以正常工作。

0 个答案:

没有答案