记一次在electron项目中使用adm-zip库解压超过2GB压缩包报错

报错如下:

File size (2653263820) is greater than possible Buffer: 2147483647 bytes

        大概意思是说,这个压缩包在缓冲区超过了2GB,node直接就给我报错了,adm-zip 将整个文件读取到内存中并将其保存在那里,我不知道为什么作者要这么做。

        我的解决办法是不使用这个库了,我推荐使用node-stream-zip库,它使用stream流的形式解压,就比较完美。不会完全读进内存,我封装的解压函数:

const StreamZip = require('node-stream-zip');
//zipFilePath压缩包的地址,extractTo为解压到哪里
async function unzipFile(zipFilePath, extractTo) {
  return new Promise((resolve, reject) => {
    try {
      // 初始化stream-zip对象
      const zip = new StreamZip({
        file: zipFilePath, // ZIP文件路径
        storeEntries: true, // 保存条目信息以便后续访问
      });
      // 提取所有文件到指定目录
      zip.on('ready', () => {
        zip.extract(null, extractTo, (err, count) => {
          if (err) {
            reject(err);
          } else {
            console.log(`${count} files extracted to ${extractTo}`);
            zip.close(); // 关闭zip文件
            resolve(count);
          }
        });
      });
      // 监听错误事件
      zip.on('error', (err) => {
        reject(err);
      });
    } catch (error) {
      reject(error);
    }
  });
}

调用

const extractedFilesCount = await unzipFile(filePath, tempPath);

在node中最好使用stream流来读取文件,不然会占用过多内存~

点个三连吧~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值