gpt4 book ai didi

javascript - Webrtc数据通道: saving data in file during transfer of big files

转载 作者:行者123 更新时间:2023-11-28 19:16:30 25 4
gpt4 key购买 nike

我正在使用 WebRTC 数据通道构建文件传输服务。

对于小于 30 Mb 左右的较小文件来说,它的表现相当不错。现在在接收端,我只是将文件数据保存在内存中,当所有数据传输完毕后,我保存文件。

有点像这样:

//On the recieving side
var dataArray = [];
var dcOnMessage= function(event){
dataArray .push(event.data);
if(bytesToRecieve == 0)
{
var blob = new Blob(dataArray ,{type: incFileDesc.type});
reader.onload = function (event) {
saveToDisk(event.target.result,incFileDesc.name);
}
reader.readAsDataURL(blob);
}
}

var saveToDisk = function(fileUrl, fileName) {
var save = document.createElement('a');
save.href = fileUrl;
save.target = '_blank';
save.download = fileName || fileUrl;
var event = document.createEvent('Event');
event.initEvent('click', true, true);

save.dispatchEvent(event);
(window.URL || window.webkitURL).revokeObjectURL(save.href);
}

所以我想将数据保存在磁盘上的文件中,然后直接写入该文件。但我该怎么做呢?

最佳答案

恐怕当前的标准化 API 不容易允许这样做(请参阅 Philipp 的回复)。最接近的方法是将每个文件保存为 localstorage/indexeddb 中的 blob/etc,然后使用 Blob 构造函数从 blob 集合构建最终文件。它仍然会产生大约 2 倍文件大小的临时内存命中。或者只是保留内存中的每个 Blob,直到构建最终的 Blob 并保存到磁盘(仍然会占用内存,但会逐渐增加,直到构建最终的 Blob 时达到 2 倍)。当最终文件的大小达到可用 RAM 的大小范围时,这些可能会开始出现问题。

在 Firefox 中直接传输单个大 Blob ->Firefox 现在可以在没有 SCTP ndata 支持(尚不可用)的情况下使用已弃用的低级分块机制进行工作;它避免了 2x 部分的内存命中。

我上次检查过,Chrome 中有一个非标准 API,主要可以完成附加到文件部分。这一直是 WebAPI 人员持续讨论的领域;可能是时候再次戳他们了。

关于javascript - Webrtc数据通道: saving data in file during transfer of big files,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29700049/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com