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

使用Node.js unzip模块解压仅部分文件被提取且每次结果不同

Node.js unzipper 解压文件不全/随机输出问题修复方案

问题根因

  1. 代码存在语法疏漏:unzipper.Extract()的闭合括号缺失,导致finish、error等事件绑定到了错误的流对象上,解压过程中的异常直接被静默丢弃。
  2. 事件监听逻辑错误:你当前监听的finish事件仅代表流数据写入完成,unzipper内部的文件落地、目录创建等收尾操作并未全部执行完毕;且未监听error事件,解压过程中出现的权限不足、压缩包损坏、特殊路径字符等问题都会导致流程随机中断,才会出现每次提取出来的文件都不一致的情况。

修复后代码

const fs = require('fs');
const unzipper = require('unzipper');

fs.createReadStream('test.zip')
  .pipe(unzipper.Extract({ path: 'test' }))
  // 监听close事件,代表整个解压流程完全结束,所有文件都已写入完成
  .on('close', () => {
    console.log('解压全部完成');
  })
  // 必须监听error事件,捕获解压过程中出现的所有异常
  .on('error', (err) => {
    console.error('解压出错:', err);
  });

额外排查项

  • 检查test目录是否存在读写权限,避免部分文件因权限不足写入失败
  • 确认test.zip文件没有损坏,可先尝试用本地解压工具验证压缩包完整性
  • 如果压缩包内包含中文名文件,可在unzipper.Extract配置中添加decodeStrings: false避免编码问题导致的写入失败

内容的提问来源于stack exchange,提问作者H.M

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 22:45:02