我有一个纯粹的Uint8Array我想保存到blob中 我可以创建任何类型的blolb(' text / plain',application / octet-stream等)..
var a_blob = new Blob(Uint8Array,{type: whatever});
稍后测试我的结果:
this.read_blob = function (blob) {
var reader = new FileReader();
reader.onloadend = function (evt)
{ var full_buffer = evt.target.result; }
reader.readAsArrayBuffer(blob);
}
我已经存储了1 219 2 0个值(使用Uint32Array的4个值)并且我已经将所有内容都设置为正确。
现在,我有:(我想查看blob值)
var data = new Uint32Array (full_buffer,0,4);
我有: 0:808464433 1:809054514 2:808464432 3:808464432 ????????????
如果我使用:
var data = new Uint8Array (full_buffer,0,4);
我有: [49,48,48,48,50,49,57,48,48,...]这是1 0 0 0 2 1 9 0的ascii代码.... (我的值的字符串表示....)
我做得不好? 也许blob并没有真正保存为纯二进制数据? fullbuffer是二进制字符串对象吗? 我要使用特定类型吗? 我是否以不同的方式阅读缓冲区? 必须在循环中创建一个Uint8Array来关联full_buffer单个数据吗?
答案 0 :(得分:0)
<强>解决强>
正如MDN所解释的:要创建一个blob,你必须使用
blob = new Blob(部分,类型); part =要放入新Blob对象的数据对象数组。
所以修复(不容易发现因为自己正在看一个又一个时间数组,bufferarray,typedarrays ....而你感到困惑)是使用[]括号来动态创建一个元素数组/ s
所以而不是:
var a_blob = new Blob(Uint8Array,{type: whatever});
使用
var a_blob = new Blob([Uint8Array],{type: whatever});
相信我,经过大量的网络搜索后,你可以看到哪些帖子可以看到带有和不带括号的blob创建