浏览器端大文件(1GB 以上,上不封顶)下载的解决方案有哪些? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
gfhzhang
V2EX    前端开发

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

  •  
  •   gfhzhang 2024-01-14 17:06:09 +08:00 3073 次点击
    这是一个创建于 687 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    15 条回复    2024-01-15 09:23:49 +08:00
    shoumiao
        1
    shoumiao  
       2024-01-14 17:11:07 +08:00 via Android
    看看 mega 是怎喵解决的?
    ayyayyayy2002
        2
    ayyayyayy2002  
       2024-01-14 17:11:49 +08:00 via Android
    bitcomet 有个磁盘加速的选项可以调缓存,也可以用插件捕获浏览器的下载
    gfhzhang
        3
    gfhzhang  
    OP
       2024-01-14 17:21:57 +08:00
    @Joshuahui 想完全依赖浏览器(不同厂商需要兼容)来处理
    gfhzhang
        4
    gfhzhang  
    OP
       2024-01-14 17:43:56 +08:00
    @shoumiao 看了下,猜测它用的是我说的文件流缓存的方式下载的,最后会生成一个 blob 资源链接,但是这种方式弊端还是有的,有些电脑 RAM 本身就没有多少,而且一次下载很大的文件 RAM 存储不了多少数据
    IvanLi127
        5
    IvanLi127  
       2024-01-14 18:07:40 +08:00 via Android
    传统方式不是浏览器跳转到下载链接让它自己慢慢下吗?
    ss098
        6
    ss098  
       2024-01-14 18:13:38 +08:00
    开源断点续传协议 tus

    https://tus.io/
    ss098
        7
    ss098  
       2024-01-14 18:14:22 +08:00
    看错了,是下载不是上传,tus 适用于上传
    0o0O0o0O0o
        8
    0o0O0o0O0o  
       2024-01-14 18:19:36 +08:00
    okakuyang
        9
    okakuyang  
       2024-01-14 18:48:26 +08:00   1
    额,虽然我没实操过。不过浏览器下载文件默认不就是一点点写到磁盘的,虽然最后好像有个校验过程会有点卡的感觉。像 mega 那种用 js 下载文件分片再合并确实会堆在内存里,而且似乎最后下载完成的一瞬间会用大量内存,并卡住。如果要用 js 用流的方式喂到磁盘里,不知道 file system api 里有没有新方案。
    JensenQian
        10
    JensenQian  
       2024-01-14 20:02:15 +08:00 via Android
    搞个 idm
    zsj1029
        11
    zsj1029  
       2024-01-14 20:19:11 +08:00 via iPhone
    传统的就是写硬盘,mega 做的流式下载才是写内存
    renmu
        12
    renmu  
       2024-01-14 21:01:27 +08:00 via Android
    印象中如果你的文件支持 range 下载,浏览器下载不会保存到内存。
    AV1
        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
    hyperbin
        14
    hyperbin  
       2024-01-15 08:29:33 +08:00 via Android
    浏览器不会这么蠢
    menglizhi2333
        15
    menglizhi2333  
       2024-01-15 09:23:49 +08:00
    @gfhzhang 这样的需求可以通过 OPFS 来将文件写入到用户授权的目录下, 如果介意授权的话, 可以将文件分片放入 indexDB 中, indexDB 数据内容是持久化放在 chrome 的运行目录里, 这样可以避免授权, 也能存放大文件, 但一定要记得清理, chrome 运行目录默认在 C 盘, 会导致 C 盘存储紧张
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     977 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 33ms UTC 19:14 PVG 03:14 LAX 11:14 JFK 14:14
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86