如何在 blob 中使用多个 arrayBuffers?



我一直在寻找,没有找到有效的答案。我有多个 arrayBuffer,我想将它们组合成一个 blob。我需要以某种方式组合数组缓冲区吗?还是应该创建多个 Blob 并组合它们?下面是我正在尝试做的事情的示例,但失败了

const buffers = []
for(var i in files){
...code to retrieve arrayBuffer
buffers.push(arrayBuffer)
}
const blob = new Blob([buffers], {type:'application/pdf'})
const url = window.URL.createObjectURL(blob)
window.open(url)

上面的代码不起作用,因为新 Blob 需要一个 arrayBuffer 而不是它们的数组。有什么东西可以做到这一点吗?

新的 Blob 需要一个 arrayBuffer,而不是它们的数组。

否,Blob 构造函数等待blobPart 序列。规范使用术语"序列",因为它接受几种类型的 ArrayLike对象,但核心思想是你的代码实际上是正确的方式,因为唯一的参数将被迭代以搜索对应于blobParts的对象,即 Blobs、ArrayBuffers 或 DOMStrings。

因此,要回答这个问题,要将多个 ArrayBuffer 连接到单个 Blob 中,您只需将这些传递给构造函数的数组中传递即可。

const arr1 = new Uint8Array(12);
const buf1 = arr1.buffer;
arr1.fill(0xAA);
const arr2 = new Uint8Array(12);
const buf2 = arr2.buffer;
arr2.fill(0xBB);
const arr3 = new Uint8Array(12);
const buf3 = arr3.buffer;
arr3.fill(0xCC);
const blob = new Blob( [ buf1, buf2, buf3 ] );
new Response( blob ).arrayBuffer().then( buf => {
const view = new Uint8Array( buf );
const as_string = [ ...view ].map( (num) => num.toString( 16 ) );
console.log( as_string );
} );


对于您的问题,它位于其他地方...

最新更新