使用zlib压缩多个文件

use*_*402 17 compression gzip zlib node.js

以下代码将压缩一个文件.如何压缩多个文件

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);
Run Code Online (Sandbox Code Playgroud)

B T*_*B T 7

Gzip是一种压缩一串数据的算法.它对文件或文件夹一无所知,因此不能自己做你想做的事情.您可以做的是使用归档工具构建单个归档文件,然后使用gzip压缩构成归档的数据:

另请参阅此答案以获取更多信息:Node.js - 压缩/解压缩文件夹


Ove*_*ivr 5

最好的包(也是唯一一个仍然维护和正确记录的包)似乎是 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();
Run Code Online (Sandbox Code Playgroud)


mic*_*nic -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);
    }
}
Run Code Online (Sandbox Code Playgroud)

#1 方法:

// Dummy, just compress the files, no control at all;
listOfFiles.forEach(compressFile);
Run Code Online (Sandbox Code Playgroud)

#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');
});
Run Code Online (Sandbox Code Playgroud)

  • 我有点困惑为什么这个答案被接受,因为它似乎没有回答这个问题(根据上面 user3180402 的评论^) (21认同)
  • 我想要一个包含所有文件的 zip 文件。 (4认同)