以下代码将压缩一个文件。如何压缩多个文件
var gzip = zlib.createGzip();
var fs = require('fs');
var inp = fs.createReadStream('input.txt');
var out = fs.createWriteStream('input.txt.gz');
inp.pipe(gzip).pipe(out);
答案 0 :(得分:7)
Gzip是一种压缩一串数据的算法。它对文件或文件夹一无所知,因此不能自己做你想做的事情。您可以做的是使用归档工具构建单个归档文件,然后使用gzip压缩构成归档的数据:
另请参阅此答案以获取更多信息:Node.js - Zip/Unzip a folder
答案 1 :(得分:3)
这方面的最佳方案(也是唯一一个仍然保持并且记录正确的方案)似乎是archiver
var fs = require('fs');
var archiver = require('archiver');
var output = fs.createWriteStream('./example.tar.gz');
var archive = archiver('tar', {
gzip: true,
zlib: { level: 9 } // Sets the compression level.
});
archive.on('error', function(err) {
throw err;
});
// pipe archive data to the output file
archive.pipe(output);
// append files
archive.file('/path/to/file0.txt', {name: 'file0-or-change-this-whatever.txt'});
archive.file('/path/to/README.md', {name: 'foobar.md'});
// Wait for streams to complete
archive.finalize();
答案 2 :(得分:2)
你可以使用的东西:
var listOfFiles = ['firstFile.txt', 'secondFile.txt', 'thirdFile.txt'];
function compressFile(filename, callback) {
var compress = zlib.createGzip(),
input = fs.createReadStream(filename),
output = fs.createWriteStream(filename + '.gz');
input.pipe(compress).pipe(output);
if (callback) {
output.on('end', callback);
}
}
#1方法:
// Dummy, just compress the files, no control at all;
listOfFiles.forEach(compressFile);
#2方法:
// Compress the files in waterfall and run a function in the end if it exists
function getNext(callback) {
if (listOfFiles.length) {
compressFile(listOfFiles.shift(), function () {
getNext(callback);
});
} else if (callback) {
callback();
}
}
getNext(function () {
console.log('File compression ended');
});