Javascript - 将类型化数组保存为blob并以二进制数据的形式读回

时间:2016-05-02 14:52:29

标签: javascript arrays filereader typed-arrays

我有一个充满二进制数据的类型数组,它是从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);

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

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

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

2 个答案:

答案 0 :(得分:10)

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

更正的代码看起来像var blob = new Blob([myArr], {type: "octet/stream"};

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

答案 1 :(得分:1)

根据 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'});