JS如何实现大文件“多线程”下载及断点续传

我后端存储大文件的时候是切分存储的,对一个大文件切分成了n块,存在Mongodb中。现在在前端采用JS实现多线程下载,目前的思路是在前端发钱n个ajax,然后利用promise.all等待这n个请求的返回,返回后数据拼接然后设置a标签的download属性进行下载。目前存在两个问题:
1.因为我是等所有的数据都回来后再整合下载的,所以数据先是在内存中的,对于一个很大的文件,比如说1G或2G这样显然是不合理的。
2.再说断点续传问题,思路为点击下载这个文件,前端先读取这个文件,然后判断这个文件的第i(0<i<n)块是否已经下载了,仅下载未下载的部分,但是问题是JS无法写入到本地文件啊。
想请问各位码友有什么好的解决方案吗?有一个朋友说看能不能使用浏览器的代理,就是说浏览器每次请求的是这个代理,然后在代理中实现文件的各种操作,但是他又没有具体说这个代理究竟是个什么东西,具体该怎么实现,所以不太好搜索材料。希望各位码友不吝赐教。

阅读 8.6k
2 个回答

你可以分开存,但是为什么要分开下载?后端拼接前端一次下载不可以吗?

HTTP请求头里有个Range字段,用来告知服务器返回文件的哪一部分。阿里OSS就是用了这个字段来做下载的断点续传(参见里边的 Range请求示例 一段),我觉得你也可以试试朝这个思路搞吧,尽量利用标准化的东西,别从头造轮子。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题