问题:传统文件下载,比如文件流下载,文件会缓存浏览器端,等待文件下载完成后,才去合并流;如果内存不足,对于多个大文件( 4GB 以上)下载,还是采用浏览器等待完全下载缓存的方式,浏览器将会崩溃;
最终需要的效果:浏览器能写入本地磁盘临时文件,而不是将文件缓存到内存
1
shoumiao 348 天前 via Android
看看 mega 是怎喵解决的?
|
2
Joshuahui 348 天前 via Android
bitcomet 有个磁盘加速的选项可以调缓存,也可以用插件捕获浏览器的下载
|
4
gfhzhang OP @shoumiao 看了下,猜测它用的是我说的文件流缓存的方式下载的,最后会生成一个 blob 资源链接,但是这种方式弊端还是有的,有些电脑 RAM 本身就没有多少,而且一次下载很大的文件 RAM 存储不了多少数据
|
5
IvanLi127 348 天前 via Android
传统方式不是浏览器跳转到下载链接让它自己慢慢下吗?
|
6
ss098 348 天前
|
7
ss098 348 天前
看错了,是下载不是上传,tus 适用于上传
|
9
okakuyang 348 天前 1
额,虽然我没实操过。不过浏览器下载文件默认不就是一点点写到磁盘的,虽然最后好像有个校验过程会有点卡的感觉。像 mega 那种用 js 下载文件分片再合并确实会堆在内存里,而且似乎最后下载完成的一瞬间会用大量内存,并卡住。如果要用 js 用流的方式喂到磁盘里,不知道 file system api 里有没有新方案。
|
10
JensenQian 348 天前 via Android
搞个 idm
|
11
zsj1029 348 天前 via iPhone
传统的就是写硬盘,mega 做的流式下载才是写内存
|
12
renmu 348 天前 via Android
印象中如果你的文件支持 range 下载,浏览器下载不会保存到内存。
|
13
DOLLOR 348 天前
@gfhzhang
MEGA 是写到 OPFS 里的。 OPFS 支持流式读写,底层是浏览器的本地存储的缓存文件,不会爆内存。 https://developer.mozilla.org/en-US/docs/Web/API/File_System_API/Origin_private_file_system |
14
hyperbin 347 天前 via Android
浏览器不会这么蠢
|
15
menglizhi2333 347 天前
@gfhzhang 这样的需求可以通过 OPFS 来将文件写入到用户授权的目录下, 如果介意授权的话, 可以将文件分片放入 indexDB 中, indexDB 数据内容是持久化放在 chrome 的运行目录里, 这样可以避免授权, 也能存放大文件, 但一定要记得清理, chrome 运行目录默认在 C 盘, 会导致 C 盘存储紧张
|