我正在摆弄WebRTC
文件共享,但现在遇到了blob
的问题。似乎(至少在google chrome上)blob文件的限制为500mb。
我的接收器接收ArrayBuffers
并从中提取blobs,然后将其存储在数组中。当接收到最后一个ArrayBuffer
时,构建一个大blob,并创建链接并提供给用户下载文件。我试图发送800mb的文件,但大blob的caped为500mb,因此文件损坏。正如我所理解的,这是一个众所周知的blob内存限制,它不知何故可以绕过(我想https://www.sharefest.me/做到了吗?),但如何?
或者也许有一些其他的方式让用户获得一个链接到组合数组缓冲区,并将它们保存为文件?
这是我的收件人代码:
var finalBlob;
var ind = 0;
var f = files_r[ind];//file
var part = f.currentChunk;
var blobs = f.fileblobs;
blobs.push(new Blob([data], {
type: f.mime
}));
f.currentChunk++;
if (f.currentChunk === f.totalchunks) {
finalBlob = new Blob(blobs, {
type: f.mime
});
var link = g(ind + '_link');
var url = URL.createObjectURL(finalBlob);
link.href = url;
link.download = f.name;
console.log("finished");
}
您应该将blob保存到IndexedDB,然后查询它们,创建结果blob并提供链接。看看这里的讨论https://code.google.com/p/chromium/issues/detail?id=375297。我使用Dexie (IndexedDB的包装器)将块保存/检索到IndexedDB。