下载大文件

时间:2017-12-13 21:39:58

标签: javascript download fileapi

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

要求

  1. 它适用于大型文件
  2. 应该是跨浏览器解决方案
  3. 我发现了......

    1. 使用JS数组
      是的,我们可以在常规Javascript数组中下载和存储所有块。
      • 它的跨浏览器解决方案
      • 但它使用RAM,如果文件大小超过可用内存浏览器,则只会崩溃......
    2. FileSaver.js
      • 部分跨浏览器
      • 文件大小有限
    3. StreamSaver.js
      • 不是跨浏览器
      • 适用于大型文件
    4. Filesystem API
      • 它的Chrome沙箱文件系统api
      • 适用于大型文件
    5. 但我仍然无法通过所涵盖的要求实现我的目标...... 如果有人有最佳解决方案的经验,请在此处分享。感谢

1 个答案:

答案 0 :(得分:2)

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

在Chrome中,您可以使用非标准文件系统API或Blob which Chrome will use the file-system for if the blob is large

在Firefox中,您可以使用the non-standard IDBMutableFile。但是,它不适用于the download API,因此您必须使用window.location将浏览器发送到Blob URL,然后浏览器必须下载该URL(可能不会对所有文件扩展名发生)。您还可能需要使用the IDB persistent option来保存大于~2GB的文件。

在其他浏览器中,Blob是您唯一真正的选择。在好的方面,the OS the browser runs on may use paging which could enable the browser to create blobs larger than memory

像StreamSaver这样的基于服务工作者的选项也可以提供帮助(也许这可能是Firefox的下载API替代方案),但是there is (or was?) a limit to how long the browser will wait for a complete response,这意味着您可能必须在某处下载并存储块以完成及时回应。