【问题标题】:Javascript - Save typed array as blob and read back in as binary dataJavascript - 将类型化数组保存为 blob 并作为二进制数据读回
【发布时间】:2016-05-02 14:52:28
【问题描述】:

我有一个由 ArrayBuffer 生成的包含二进制数据的类型化数组

var myArr = new Uint8Array(myBuffer);

我正在向用户展示这个

var blob = new Blob(myArr, {type: "octet/stream"};
var blobURL = URL.createObjectURL(blob);

并插入一个链接

"<a href=" + blobUrl + " download=" + filename "/a>"

稍后,我让用户从磁盘中选择文件,并使用文件阅读器来处理

var reader = new FileReader();

reader.onload = function () {
console.log(reader.result);
};

reader.readAsArrayBuffer(sourceFile);

问题是,似乎无论我做什么,我都会得到一个文件内容的“字符串”。事实上,当我保存文件时,我可以打开它,而且它显然是人类可读的。 IE。如果我的 Uint8Array 是 {"0" : "51", "1" : "52", "2" : "53" }

我可以在文本编辑器中打开下载的 blob,我只看到“515253”,我认为这不是应该发生的情况。

如何为格式正确的文件创建一个文件下载链接,以便我可以在 dget 中读取正确的值?

【问题讨论】:

    标签: javascript arrays filereader typed-arrays


    【解决方案1】:

    事实证明,问题在于我在创建 Blob 时遇到了语法错误。

    更正后的代码如下所示: var blob = new Blob([myArr], {type: "octet/stream"});

    如果我已经传递了一个 ArrayBuffer 参数,我不确定为什么。为什么我需要括号符号?似乎多余?

    【讨论】:

    • 第一个参数始终是一个数组,理论上它可以包含多个部分(例如多个 ArrayBuffer 视图),然后在内部将它们连接起来(在构建二进制文件格式之类的东西时非常有用)。跨度>
    【解决方案2】:

    根据 Mozilla

    https://developer.mozilla.org/en-US/docs/Web/API/Blob#Example_for_creating_a_URL_to_a_typed_array_using_a_blob

    var blob = new Blob([typedArray.buffer], {type: 'application/octet-stream'});
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-02-05
      • 2019-10-14
      • 2023-03-14
      • 2018-01-23
      • 2013-08-22
      • 2016-12-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多