Node.js 如何使用node js将多个文件转换为压缩的zip文件
我想将多个文件转换为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
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'));