下载大文件

ras*_*had 5 javascript download fileapi

我有一个表示为块列表的文件,目标是下载所有块,加入并保存为文件。

要求

  1. 它应该适用于大文件
  2. 应该是跨浏览器的解决方案

我发现了什么...

  1. 使用 JS 数组
    是的,我们可以下载所有块并将其存储在常规 Javascript 数组中。
    • 这是跨浏览器的解决方案
    • 但它使用 RAM,如果文件大小超过可用内存,浏览器就会崩溃......
  2. 文件保存器.js
    • 部分跨浏览器
    • 文件大小有限
  3. StreamSaver.js
    • 不跨浏览器
    • 适用于大文件
  4. 文件系统API
    • 这是 Chrome 沙箱文件系统 api
    • 适用于大文件

但我仍然无法实现我的目标与覆盖的要求...
如果有人有最佳解决方案的经验,我恳请在这里分享。谢谢

Ale*_*ara 5

不幸的是,这里还没有真正的跨浏览器选项。

在 Chrome 中,您可以使用非标准文件系统 API,也可以使用 Blob(如果 Blob 很大,Chrome 将使用 Blob)

在 Firefox 中,您可以使用非标准 IDBMutableFile。但是,它无法与下载 API一起使用,因此您必须使用该window.locationAPI 将浏览器发送到 blob URL,然后浏览器必须下载该 URL(可能并非所有文件扩展名都会发生这种情况)。您可能还需要使用IDB 持久选项来保存大于 ~2GB 的文件。

在其他浏览器中,Blob 是您唯一真正的选择。从好的方面来说,浏览器运行的操作系统可能会使用分页,这可以使浏览器创建大于内存的 blob

像 StreamSaver 这样基于 service-worker 的选项也可能有帮助(也许这可能是 Firefox 的下载 API 替代方案),但是浏览器等待完整响应的时间存在(或曾经?)限制,这意味着您将可能必须下载块并将其存储在某个地方才能及时完成响应。