gpt4 book ai didi

html - 逐 block 下载文件客户端

转载 作者:行者123 更新时间:2023-12-01 14:18:42 29 4
gpt4 key购买 nike

我正在使用 WebRTC 将文件发送到连接的对等方,并且我正在以块的形式发送文件。但是,我无法弄清楚如何让对等方在文件逐块流入时保存/下载文件。

我在网上找到的所有例子都推荐做这样的事情:

// sender
dataConnection.send({
'file': file
});

// receiver
dataConnection.on('data', function(fileData) {

var dataView = new Uint8Array(fileData);
var dataBlob = new Blob([dataView]);
var url = window.URL.createObjectURL(dataBlob);

// create <a>
var link = document.createElement('a');
link.href = url;
link.download = fileName;
document.body.appendChild(link);

// trigger the download file dialog
link.click();
}

然而,这种方法不支持获取文件的块并在每个块出现时写入......它必须等待发送方读取整个文件并将其发送给接收方。

我想要做的是这样的:
// sender
for (var i = 0; i < fileSize; i += chunkSize) {

var fileReader = new FileReader();

// read next chunk
var blob = file.slice(start, end);
...
fileReader.onload = function(e) {
...
dataConnection.send({ 'blob': blob });
}
fileReader.readAsArrayBuffer(blob);
}

这样,我正在逐块读取文件,并在读取时将每个块发送到接收器。现在,我知道如何实际保存以这种方式发送的文件的唯一方法是执行此博客文章中描述的操作:

http://bloggeek.me/send-file-webrtc-data-api

... 描述于 “第 6 步:下载到常规 FS” .然而,这种方法在所有块进入时将它们存储在内存中,然后构建一个大 UInt8Array。在内存中,然后让接收器下载文件。这对内存来说真的很重,实际上仅限于几百 MB,因此它无法扩展。

有没有办法在第一个块进来后打开文件下载对话框,并在它们进来时继续写入块,以便下载是“流式”下载?

最佳答案

更新

流 API:https://streams.spec.whatwg.org

https://jakearchibald.com/2016/streams-ftw

不幸的是,根据我的研究,无法打开文件保存/文件下载对话框并以“流式”方式保存/下载文件。

我将采用的方法是使用 FileSystem API .不幸的是,并非每个浏览器都完全支持:

  • http://caniuse.com/#feat=filesystem

  • ...而且似乎很多浏览器都不太可能采用这个 API :(
  • http://www.w3.org/TR/file-system-api/

    Work on this document has been discontinued and it should not be referenced or used as a basis for implementation

  • 关于html - 逐 block 下载文件客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23702157/

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