无法构建“Blob”:数组长度超出支持的限制

ksp*_*rin 2 javascript

我尝试Blob使用以下(Chrome 浏览器)构建一个简单的 10.5mb :

var arr = new Uint8Array(10485833);
var blob = new Blob(arr, { type: 'application/octet-stream' });
Run Code Online (Sandbox Code Playgroud)

我收到错误:

未捕获的 RangeError:无法构造“Blob”:数组长度超出支持的限制。

限制是什么?为什么我不能创建一个 10mb 的 blob?如果我想创建一个 50mb 的 blob 怎么办?1GB 大块?

Blob此处使用的数据类型是否错误?最后,我试图构建一些FormData发布到服务器。例子:

var fd = new FormData();
var blob = new Blob(arr, { type: 'application/octet-stream' });
fd.append('data', blob, 'filename.zip');
Run Code Online (Sandbox Code Playgroud)

Kai*_*ido 7

这是因为 Blob 需要一个块数组。您传递的数组对于它来说太大了。(可能相关

解决方案只是将这个数组包装在一个单一的长度数组中。

var arr = new Uint8Array(10485833);
console.log(new Blob([ arr ], {type:'application/octet-stream'}))
//                   ^_____^_____ wrapped in a single lengthed Array
Run Code Online (Sandbox Code Playgroud)