Javascript 如何创建和使用纯二进制数据的 blob

civ*_*ain 5 javascript blob

我有一个纯 Uint8Array,我想保存到一个 blob 中,我可以使用任何类型(“text/plain”、application/octet-stream 等)创建该 blob。

var a_blob = new Blob(Uint8Array,{type: whatever});
Run Code Online (Sandbox Code Playgroud)

后来测试我的结果:

this.read_blob = function (blob)  {
var reader = new FileReader();        
reader.onloadend =  function (evt) 
{ var full_buffer = evt.target.result;    }
reader.readAsArrayBuffer(blob);    
}
Run Code Online (Sandbox Code Playgroud)

我已经存储了 1 219 2 0 值(使用 Uint32Array 的 4 个值),并且我已检查一切正确。

现在,我有:(我想检查 blob 值)

var data  = new Uint32Array (full_buffer,0,4);
Run Code Online (Sandbox Code Playgroud)

我有:0:808464433 1:809054514 2:808464432 3:808464432 ????????????

如果我使用:

var data  = new Uint8Array (full_buffer,0,4);
Run Code Online (Sandbox Code Playgroud)

我有: [49,48,48,48,50,49,57,48,48,...] 这是 1 0 0 0 2 1 9 0 .... 的 ascii 代码(我的字符串表示价值观……)

我做什么坏事了?也许 blob 并没有真正保存为纯二进制数据?fullbuffer 是二进制字符串对象吗?我必须使用特定类型吗?我必须以不同的方式读取缓冲区吗?必须在循环中创建一个关联 full_buffer 单个数据的 Uint8Array 吗?

civ*_*ain 1

解决了

正如MDN所解释的:要创建 blob,您必须使用

blob = new Blob(部分,类型); part = 要放入新 Blob 对象中的数据对象数组。

因此,修复方法(不容易发现,因为你一次又一次地看到数组、bufferarray、typedarrays...并且你感到困惑)是使用 [] 括号动态创建一个元素数组。

所以代替:

var a_blob = new Blob(Uint8Array,{type: whatever});
Run Code Online (Sandbox Code Playgroud)

使用

var a_blob = new Blob([Uint8Array],{type: whatever});
Run Code Online (Sandbox Code Playgroud)

相信我,经过大量网络搜索后,您可以看到帖子,其中您可以看到带或不带括号的 blob 创建