用Nodejs unzip解压巨大的压缩包文件 child_process spawn exec

前提

这也是我工作中遇到的一个问题,通过child_process.exec() 去执行unzip -l 命令,直接报错。在这里插入图片描述

问题

这是因为exec函数有个默认的缓冲区大小,大约是200KB,我们可以通过设置maxBuffer去解决问题,但不能彻底解决。因为仍不知道文件到底有多大,文件列表是不是能正常返回。

解决方案

spawn与exec的区别

child_process.spawn()适合返回所有的数据,exec()更多是返回一个执行的结果。

封装

static async childSpawnPromise(command:string, args: string[]) {
    return new Promise<any>((resolve,reject)=>{
      // unzip -l
      const cmd = child_process.spawn(command, args, { shell: true })
      const path = args[1]
      cmd.on('data', (data) => {
        resolve(data)
      });

      cmd.on('error', (data) => {
        reject(`执行命令发生错误:err:${data}, command:${command}`)
      });
    })
  }

这里的{shell: true}是指定运行的环境,否则会报下图的错误,意思是找不到可执行的unzip命令。
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值