浏览器端大文件(1GB 以上,上不封顶)下载的解决方案有哪些?

347 天前
 gfhzhang

问题:传统文件下载,比如文件流下载,文件会缓存浏览器端,等待文件下载完成后,才去合并流;如果内存不足,对于多个大文件( 4GB 以上)下载,还是采用浏览器等待完全下载缓存的方式,浏览器将会崩溃;

最终需要的效果:浏览器能写入本地磁盘临时文件,而不是将文件缓存到内存

2209 次点击
所在节点    前端开发
15 条回复
shoumiao
347 天前
看看 mega 是怎喵解决的?
Joshuahui
347 天前
bitcomet 有个磁盘加速的选项可以调缓存,也可以用插件捕获浏览器的下载
gfhzhang
347 天前
@Joshuahui 想完全依赖浏览器(不同厂商需要兼容)来处理
gfhzhang
347 天前
@shoumiao 看了下,猜测它用的是我说的文件流缓存的方式下载的,最后会生成一个 blob 资源链接,但是这种方式弊端还是有的,有些电脑 RAM 本身就没有多少,而且一次下载很大的文件 RAM 存储不了多少数据
IvanLi127
347 天前
传统方式不是浏览器跳转到下载链接让它自己慢慢下吗?
ss098
347 天前
开源断点续传协议 tus

https://tus.io/
ss098
347 天前
看错了,是下载不是上传,tus 适用于上传
0o0O0o0O0o
347 天前
okakuyang
347 天前
额,虽然我没实操过。不过浏览器下载文件默认不就是一点点写到磁盘的,虽然最后好像有个校验过程会有点卡的感觉。像 mega 那种用 js 下载文件分片再合并确实会堆在内存里,而且似乎最后下载完成的一瞬间会用大量内存,并卡住。如果要用 js 用流的方式喂到磁盘里,不知道 file system api 里有没有新方案。
JensenQian
347 天前
搞个 idm
zsj1029
347 天前
传统的就是写硬盘,mega 做的流式下载才是写内存
renmu
347 天前
印象中如果你的文件支持 range 下载,浏览器下载不会保存到内存。
DOLLOR
347 天前
@gfhzhang
MEGA 是写到 OPFS 里的。
OPFS 支持流式读写,底层是浏览器的本地存储的缓存文件,不会爆内存。
https://developer.mozilla.org/en-US/docs/Web/API/File_System_API/Origin_private_file_system
hyperbin
346 天前
浏览器不会这么蠢
menglizhi2333
346 天前
@gfhzhang 这样的需求可以通过 OPFS 来将文件写入到用户授权的目录下, 如果介意授权的话, 可以将文件分片放入 indexDB 中, indexDB 数据内容是持久化放在 chrome 的运行目录里, 这样可以避免授权, 也能存放大文件, 但一定要记得清理, chrome 运行目录默认在 C 盘, 会导致 C 盘存储紧张

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1008531

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX