node关于文件夹压缩和解压的方式

.Zip方式

压缩

使用archiver进行压缩

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

const output = fs.createWriteStream('archiverZip.zip');
const archive = archiver('zip');

archive.on('error', function (err) {
	throw err;
});

archive.pipe(output);
// 文件夹压缩
archive.directory('zipData/', false);
// 文件压缩
// archive.file('test.js');

archive.finalize();

将会压缩zipData下的所有文件。

解压

使用unzip2进行解压

const fs = require('fs');
const unzip = require('unzip2');

const zipDataPath = process.cwd() + '/archiverZip.zip';
const unzipDataPath = process.cwd() + '/unZipData';

if (fs.existsSync(unzipDataPath)) {
	deleteall(unzipDataPath);
}

const contactsReadStream = fs.createReadStream(zipDataPath);

contactsReadStream.pipe(unzip.Extract({
	path: unzipDataPath
}));

GZip方式

文件压缩

使用zlib进行压缩

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

const gzipDataPath = process.cwd() + '/test.js';
const gzipPath = process.cwd() + '/gzipData.zip';

const gzipReadStream = fs.createReadStream(gzipDataPath);
const gzipWriteStream = fs.createWriteStream(gzipPath)

gzipReadStream.pipe(zlib.createGzip()).pipe(gzipWriteStream);

文件解压

使用zlib进行解压

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

const unGzipPath = process.cwd() + '/gzipData.zip';
const unGzipDataPath = process.cwd() + '/unGzip.js';

const unGzipReadStream = fs.createReadStream(unGzipPath);
const unGzipWriteStream = fs.createWriteStream(unGzipDataPath)

unGzipReadStream.pipe(zlib.createGunzip()).pipe(unGzipWriteStream);

文件夹压缩

使用tar进行压缩

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

const pack = new tar.Pack({ gzip: true });
const gzipPath = 'zipData';
//遍历文件夹,并以指定基准输出
readDirSync(gzipPath, "base");
function readDirSync(path, base) {
  if (base == undefined) {
    base = path
  }
  const pa = fs.readdirSync(path);
  pa.forEach((ele, index) => {
    var info = fs.statSync(path + "/" + ele);
    if (info.isDirectory()) {
      readDirSync(path + "/" + ele, base + "/" + ele);
    } else {
      pack.add(path + "/" + ele);
    }
  });
}

pack.end();
const writeStream = fs.createWriteStream('gzipData.tar.gz');
pack.pipe(writeStream);

或者是

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

const writeStream = fs.createWriteStream('gzipDataTar.tar.gz');
tar.c( // or tar.create
  {
    gzip: true
  },
  [ gzipPath ]
).pipe(writeStream)

文件夹解压

使用tar进行解压

const tar = require('tar');

const unGzipPath = process.cwd() + '/gzipData.tar.gz';
tar.x({ // or tar.extract
  file: unGzipPath,
}).then()

测试代码

// zip压缩
const fs = require('fs');
const archiver = require('archiver');

const output = fs.createWriteStream('archiverZip.zip');
const archive = archiver('zip');

archive.on('error', function (err) {
	throw err;
});

archive.pipe(output);
archive.directory('zipData/', false); // 文件夹压缩
archive.file('test.js'); // 文件压缩
archive.finalize();



// zip解压
const fs = require('fs');
const unzip = require('unzip2');

const zipDataPath = process.cwd() + '/archiverZip.zip';
const unzipDataPath = process.cwd() + '/unZipData';

if (fs.existsSync(unzipDataPath)) {
	deleteall(unzipDataPath);
}

const contactsReadStream = fs.createReadStream(zipDataPath);

contactsReadStream.pipe(unzip.Extract({
	path: unzipDataPath
}));


// gz文件的压缩
const fs = require('fs');
const zlib = require('zlib');

const gzipDataPath = process.cwd() + '/test.js';
const gzipPath = process.cwd() + '/gzipData.zip';

const gzipReadStream = fs.createReadStream(gzipDataPath);
const gzipWriteStream = fs.createWriteStream(gzipPath)

gzipReadStream.pipe(zlib.createGzip()).pipe(gzipWriteStream);



// gz文件解压
const fs = require('fs');
const zlib = require('zlib');

const unGzipPath = process.cwd() + '/gzipData.zip';
const unGzipDataPath = process.cwd() + '/unGzip.js';

const unGzipReadStream = fs.createReadStream(unGzipPath);
const unGzipWriteStream = fs.createWriteStream(unGzipDataPath)
unGzipReadStream.pipe(zlib.createGunzip()).pipe(unGzipWriteStream);



// gz文件夹压缩
const fs = require('fs');
const tar = require('tar');

const pack = new tar.Pack({ gzip: true });

const gzipPath = 'zipData';
//遍历文件夹,并以指定基准输出
readDirSync(gzipPath, "base");
function readDirSync(path, base) {
  if (base == undefined) {
    base = path
  }
  const pa = fs.readdirSync(path);
  pa.forEach((ele, index) => {
    var info = fs.statSync(path + "/" + ele);
    if (info.isDirectory()) {
      readDirSync(path + "/" + ele, base + "/" + ele);
    } else {
      pack.add(path + "/" + ele);
    }
  });
}

pack.end();
const writeStream = fs.createWriteStream('gzipDataTar.tar.gz');
pack.pipe(writeStream);



// gz文件夹压缩
const fs = require('fs');
const tar = require('tar');

const writeStream = fs.createWriteStream('gzipDataTar.tar.gz');
tar.c( // or tar.create
  {
    gzip: true
  },
  [gzipPath]
).pipe(writeStream)



// gz文件解压
const tar = require('tar');

const unGzipPath = process.cwd() + '/gzipData.tar.gz';
tar.x({ // or tar.extract
  file: unGzipPath,
}).then()
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值