Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/465.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 有没有一种方法可以将数据流化为一个blob(或生成一个巨大的blob)_Javascript_Html - Fatal编程技术网

Javascript 有没有一种方法可以将数据流化为一个blob(或生成一个巨大的blob)

Javascript 有没有一种方法可以将数据流化为一个blob(或生成一个巨大的blob),javascript,html,Javascript,Html,检查MDN我看到以前有,我可以调用它继续向blob添加数据,但根据MDNBlobBuilder的说法,不推荐使用它,而赞成使用它。不幸的是,Blob构造函数在构造时需要内存中的所有数据。我的数据太大,在构建时无法存储在内存中。看着这张照片,你也什么也看不到 有没有办法在客户端生成大数据并将其放入blob中?例如,我想渲染一个16k×16k的图像。未压缩,这是一个1gig的图像 我有一个算法,可以一次生成1行或几行扫描线,但我需要将这些扫描线写入文件/blob,然后在完成后,我可以使用标准方法让用

检查MDN我看到以前有,我可以调用它继续向blob添加数据,但根据MDN
BlobBuilder
的说法,不推荐使用它,而赞成使用它。不幸的是,
Blob
构造函数在构造时需要内存中的所有数据。我的数据太大,在构建时无法存储在内存中。看着这张照片,你也什么也看不到

有没有办法在客户端生成大数据并将其放入blob中?例如,我想渲染一个16k×16k的图像。未压缩,这是一个1gig的图像

我有一个算法,可以一次生成1行或几行扫描线,但我需要将这些扫描线写入文件/blob,然后在完成后,我可以使用标准方法让用户下载该blob,但我似乎找不到一个API,让我将数据流到blob中

我唯一能想到的是,显然我可以从
Blob
s中创建一个
Blob
,因此我想我可以将图像的每个部分写入一个单独的Blob,然后将所有的Blob发送到另一个Blob以获得一个大Blob

这是唯一的解决办法吗?似乎有点嗯。。。。奇怪。但如果它起作用,那么’\_(ツ)_/“”


有人因为不理解这个问题而投票关闭了。这里是另一种解释

将4 gig写入一个blob

 const arrays = [];
 for (let i = 0; i < 4096; ++i) {
   arrays.push(new Uint8Array(1024 * 1024)); // 1 meg
 }
 // arrays now holds 4 gig of data
 const blob = new Blob(arrays);
这不会耗尽内存,因为周围的数据从来不会超过1meg。浏览器可以将附加到BlobBuilder的数据刷新到磁盘


实现向blob写入4G的新方法是什么?是只写入大量小blob,然后使用它们生成更大的blob,还是有一些更传统的方法,传统的方法是将数据传输到某个对象/文件/blob/存储中。

正如您所知,blob将包含的数据必须准备好传递给构造函数。Le让我们以MDN为例:

var aFileParts = ['<a id="a"><b id="b">hey!</b></a>'];
var oMyBlob = new Blob(aFileParts, {type : 'text/html'});

注意:使用您的代码进行测试(将
BlobBuilder
替换为
MyBlobBuilder
),在我的机器上没有用完内存。Windows 10、Chrome 67、8 GB Ram、Intel Core I3-64位。

这就是你应该做的,你也可以附加很多,比如说
Uint8Array
,在你的情况下可能会更有意义。谢谢,可能是重复,但实际上不是重复。关于另一个问题的答案实际上说明了什么我试图避免它的答案。它说“附加到数组”,但附加到数组将耗尽内存。我已以接近票数的方式撤回。另请参阅
var aFileParts = ['<a id="a"><b id="b">hey!</b></a>'];
var oMyBlob = new Blob(aFileParts, {type : 'text/html'});
var aFileParts = ['<a id="a"><b id="b">hey!</b></a>'];
aFileParts.push('<p>How are you?</p>');
var oMyBlob = new Blob(aFileParts, {type : 'text/html'});
var oMyOtherBlob = new Blob([], {type: 'text/html'});
oMyOtherBlob = new Blob([oMyOtherBlob, '<a id="a"><b id="b">hey!</b></a>'], {type : 'text/html'});
oMyOtherBlob= new Blob([oMyOtherBlob, '<p>How are you?</p>'], {type : 'text/html'});
var MyBlobBuilder = function() {
     var blob = new Blob([], {type: 'text/html'});
     this.append = function(src)
     {
         blob = new Blob([blob, src], {type: 'text/html'});
     };
     this.getBlob = function()
     {
         return blob;
     }
};