我正在开发一个项目,该项目需要下载存储在多个服务器中的文件。
要求:
在发明我自己的“自行车”之前,我只想检查是否有现成的解决方案。我在google和github搜索中找不到一个好的。
如果没有这样的解决方案,可能会对新文件API的限制提出一些建议。它甚至能够处理那么大的文件吗?
答案 0 :(得分:3)
坦率地说,我非常怀疑你能不能解决这个问题。
对于您正在使用的文件大小,只要让最终用户安装BitTorrent客户端并以这种方式分发您的下载,您就会好得多。
那就是说,需要考虑的几个障碍:
有两个与文件相关的API。 File
对象,但仅用于通过拖放操作读取<input type="file">
或dropped选择的文件。
您想要的是FileSystem API,但有一个非常重要的警告:此API为您提供了一个虚拟文件系统,其内容被用户隐藏。实际上,这意味着您写入磁盘的文件将存储在用户未知的模糊位置(类似\Users\Me\AppData\Local\Chrome\User Data\Default\File System\000\
),用户必须单击特殊构造的链接以启动浏览器的普通文件下载机制(在这种情况下,意味着将文件从“虚拟”文件系统复制到用户的下载文件夹。
由于要将沙箱映射到虚拟文件系统并且必须将文件复制到其目标,因此用户必须具有2 * n 字节空闲。所以我需要100 GB来下载你的50 GB文件。
您的虚拟文件系统必须request quota,并且用户必须先批准该请求才能开始编写。虽然好消息是......
webkitStorageInfo.requestQuota(webkitStorageInfo.PERSISTENT, 53687091200);
...似乎对我来说是成功的,并不能保证浏览器总是允许请求这么大的存储空间。
XHR does not apparently allow you to stream response data.当您请求XHR以Blob
(新功能)作为响应时,它必须将整个响应缓冲在内存中。
有些黑客允许您在响应数据进入时轮询XHR对象,但浏览器必然会缓冲整个响应,即使您已经读过以前的字节。
这意味着您的个人文件部分不能超过几兆字节。平均HTTP请求/响应头开销为800字节 - 1 kB,您只需在50 GB的线路上的HTTP标头中查看额外的50 MB。 (我知道.1%是一个很小的开销,这只是需要考虑的事情。)
再次,不要这样做。使用正确的工具,在这种情况下是BitTorrent。我想在某个地方有一个独立的BT客户端,您可以配置为自动开始下载预配置的torrent。因此,用户只需单击下载链接,启动EXE即可继续使用。