nodejs递归创建/删除目录,解压

 

//创建目录
FileService.mkdirs = function (dirpath) {
  if (!fs.existsSync(path.dirname(dirpath))) {
    FileService.mkdirs(path.dirname(dirpath));
  }
  if (!fs.existsSync(dirpath)) {
    fs.mkdirSync(dirpath);
  }
}


//删除目录

FileService.deleteFolder = function (path, waitTime) {
  let _waitTime = waitTime || 0;
  setTimeout(function () {
    console.log("start delete tmp folder", path);
    deleteFolder(path)
  }, _waitTime);
};

function deleteFolder(path) {
  let files = [];
  if (fs.existsSync(path)) {
    files = fs.readdirSync(path);
    files.forEach(function (file, index) {
      let curPath = path + "/" + file;
      if (fs.statSync(curPath).isDirectory()) { // recurse
        deleteFolder(curPath);
      } else { // delete file
        fs.unlinkSync(curPath);
      }
    });
    fs.rmdirSync(path);
  }
}

//解压zip
FileService.prototype.unzip = function (zipFilePath, unzipPath) {
  return new Promise(function (accept, reject) {
    yauzl.open(zipFilePath, {lazyEntries: true}, function (err, zipfile) {
      if (err) {
        reject(err);
      }
      let counter = 0;
      zipfile.readEntry();
      zipfile.on("entry", function (entry) {
        counter++;
        if (/\/$/.test(entry.fileName)) {
          zipfile.readEntry();
        } else {
          zipfile.openReadStream(entry, function (err, readStream) {
            if (err) {
              reject(err);
            }
            let unzipPath_deep = path.normalize(unzipPath + "/" + entry.fileName);
            FileService.mkdirs(path.normalize(unzipPath_deep.substring(0, unzipPath_deep.lastIndexOf(path.normalize("/"))) + "/"));
            readStream.on("end", function () {
              zipfile.readEntry();
            });
            let writeStream = fs.createWriteStream(unzipPath_deep);
            readStream.pipe(writeStream);
            writeStream.on('error', (error) => {
              reject(error)
            });
            readStream.on('error', (error) => {
              reject(error)
            });
          });
        }
      });
      zipfile.on("end", function (entry) {
        if (counter === zipfile.entryCount) {
          accept('end');
        }
      });
      zipfile.on("error", function (err) {
        reject(err)
      });
    });
  });
};

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值