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