【发布时间】:2018-11-29 14:06:31
【问题描述】:
我想从 JavaScript 访问任意二进制文件。我找到了建议通过XMLHttpRequest、数组缓冲区和Uint8Array 的文档,如下所示:
var req = new XMLHttpRequest();
req.open("GET", "file.img", true);
req.responseType = "arraybuffer";
req.onload = function () {
var arrayBuffer = req.response;
if (arrayBuffer) {
var bytes = new Uint8Array(arrayBuffer);
// use bytes for the remainder of the program
}
}
req.send(null);
但是,我想在不通过XMLHttpRequest 的情况下访问file.img,原因有两个:
- 我希望它完全在本地工作,即如果页面和
file.img都通过file:URI 访问 -
XMLHttpRequest.send/XMLHttpRequest.onload的异步特性对我来说是不必要的复杂化,因为file.img的大小为
总而言之,我正在寻找一种方法,以某种方式将这个二进制资产 file.img 包含在我的页面中,就像包含具有同步 img 标签的图像一样。
【问题讨论】:
-
使用
file:URI明显限制了您的选择。我想不出一种方法可以在您以这种方式加载的页面中实际包含随机数据文件。因此,这意味着您基本上必须将file.img的数据嵌入到 JavaScript in 中,而不是将其分开——这并不是真正“包含”页面中的二进制资产,而是包含页面中二进制资产的副本。强烈建议使用简单、小型的本地网络服务器和 XHR。 -
实际上,提前将其转换为 javascript(使用
xxd -i之类的东西和一些后期处理)对我的用例来说可能不是一个坏主意。 -
酷,这可能就是要走的路。
-
如果您将其发布为答案,我很高兴接受该建议(即使您不同意:))
-
哦,我这样做没有任何问题。 :-) 我只是不认为这是对问题的回答,因为它并没有真正包括文件,而是包括文件中的数据(因此,如果文件更改,页面的副本就会过期)。
标签: javascript html xmlhttprequest arraybuffer