You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用JSZip+文件系统访问API生成20GB+压缩包时持续失败

问题根源与分析

这个问题不是JSZip的设计上限——改用StreamSaver.js仍出现相同问题,已经可以排除JSZip的因素,核心原因在于浏览器或File System Access API的限制,具体如下:

1. 文件句柄权限超时

浏览器对通过showSaveFilePicker获取的文件写入句柄,存在隐性的权限有效期限制。当任务持续1-2小时后,浏览器可能判定该句柄长时间处于非活跃状态(即使你一直在写入),自动回收权限,触发报错里的permission problems that have occurred after a reference to a file was acquired。这是浏览器为安全和资源管理设置的机制,目前无公开配置方式可修改。

2. 临时文件/磁盘缓存限制

浏览器使用File System Access API写入大文件时,会生成临时交换文件(比如你看到的zip.crswap),这类文件的大小或存在时长受浏览器内部限制。当文件达到20-25GB时,临时文件处理逻辑触发上限,导致写入终止。

3. 浏览器资源调度限制

长时间运行的JavaScript任务(即使是流式处理),可能被浏览器资源调度机制干预。比如主线程长时间占用、内存碎片累积,间接导致写入流中断,但结合报错信息来看,权限超时是更直接的原因。

可行的解决方案
  • 拆分大文件为多个小批次:将20-25GB的目录拆分为多个10GB以内的子目录ZIP包,分别触发下载。这样每个任务的句柄持有时间缩短,避免触发权限超时,同时降低临时文件的压力。
  • 优化写入流程,减少句柄持有时间:压缩文件下载与ZIP生成的间隔,避免长时间暂停流(你代码里的stream.pause()和等待队列清空的逻辑会拉长任务时间),可尝试并行下载小文件并流式写入,缩短整体任务时长。
  • 测试不同浏览器的兼容性:不同浏览器对File System Access API的实现细节有差异,比如部分浏览器的临时文件限制更宽松,可测试是否能在其他浏览器中突破容量上限。

内容的提问来源于stack exchange,提问作者roachie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 04:47:17