Node.js 如何使用node js将多个文件转换为压缩的zip文件

Node.js 如何使用node js将多个文件转换为压缩的zip文件,node.js,zip,Node.js,Zip,我想将多个文件转换为node.js上的压缩zip文件 我尝试了以下代码: var archiver = require('archiver'); var fs = require('fs'); var StringStream = require('string-stream'); http.createServer(function(request, response) { var dl = archiver('data'); dl.pipe(response); d

我想将多个文件转换为node.js上的压缩zip文件

我尝试了以下代码:

var archiver = require('archiver');
var fs = require('fs');
var StringStream = require('string-stream');

http.createServer(function(request, response) {
    var dl = archiver('data');
    dl.pipe(response);
    dl.append(new fs.createReadStream('test/fixtures/test.txt'), {
        name: 'stream.txt', date: testDate2
    });
    dl.append(new StringStream("Ooh dynamic stuff!"), {
        name : 'YoDog/dynamic.txt'
    });
    dl.finalize(function(err) {
        if (err)
            res.send(200000)
    });
}).listen(3500);

要压缩多个文件,可以使用我在archiver模块中编写的实用程序方法:-

var zipLogs = function(working_directory) {
    var fs = require('fs');
    var path = require('path');
    var output = fs.createWriteStream(path.join(working_directory, 'logs.zip'));
    var archiver =  require('archiver');
    var zipArchive = archiver('zip');

    zipArchive.pipe(output);
    zipArchive.bulk([{src: [path.join(working_directory, '*.log')],  expand: true}]);
    zipArchive.finalize(function(err, bytes) {
        if (err)
            throw err;

    console.log('done:', base, bytes);
    });
}

例如,可以将特定目录中的所有日志文件拉入拉链。

该模块有一个更简单的解决方案:

它还支持
tar
archives,只需在第4行将'zip'替换为'tar'

我并没有因为这段代码而获得任何荣誉,它只是(你们应该检查一下,看看是否有其他方法可以将内容添加到归档文件中)的一部分


整洁的软件包,它可能是唯一一个仍在正确维护和记录的软件包。

使用node js压缩文本文件

var fs=require('fs');
var Zlib=require('zlib');
fs.createReadStream('input.txt').pipe(Zlib.createGzip()).pipe(fs.createWriteStream('input.txt.gz'));

我没有得到上述代码,所以请告诉我的例子是用户友好的理解和看看。它对我有用。这段代码会有多个文件并压缩这些文件吗?它会将多个文件压缩成一个.zip,是的。你好,mutil对上面链接中的示例有疑问,我无法理解var output=fs.createWriteStream(_dirname+'/example output.zip')中的example-output.zip是什么;如果可能的话,请解释我我也在这样做,但是它会抛出一个错误,比如在归档文件中关闭队列…我不知道为什么会发生这样的情况,所以请告诉回答者使用您的代码+错误堆栈打开一个新问题。你可以在这里共享链接,我会看一看你肯定已经提出了这个问题。这里的链接是莱昂纳多在你的帖子中提供的答案是正确的,这是一个简单的异步问题。我被archiver搞糊涂了,它1)在附加文件之前放置
archive.pipe(output)
,以及
archive.finalize()
(不应该是在之后吗?),2)调用
archive.finalize()
,就好像多个
archive.file()
操作是同步的,它只会等待它们完成,3)在可写
输出
流上有
结束
关闭
处理程序。问题:
archive.file()
操作实际上是同步的吗?是否
archive.finalize()
触发
archive.pipe(输出)
archive
如何知道何时不再添加文件?这只压缩一个文件
var fs=require('fs');
var Zlib=require('zlib');
fs.createReadStream('input.txt').pipe(Zlib.createGzip()).pipe(fs.createWriteStream('input.txt.gz'));