我想将一些readeableStream压缩成一个writableStream。 目的是在内存中完成所有操作,而不是在磁盘上创建实际的zip文件。
因为我正在使用存档
let bufferOutput = Buffer.alloc(5000);
let archive = archiver('zip', {
zlib: { level: 9 } // Sets the compression level.
});
archive.pipe(bufferOutput);
archive.append(someReadableStread, { name: test.txt});
archive.finalize();
我在第archive.pipe(bufferOutput);
行收到错误。
这是错误:“dest.on不是函数”
我在做错了什么? THX更新:
我正在运行以下代码进行测试,并且未正确创建ZIP文件。我错过了什么?
const fs = require('fs'),
archiver = require('archiver'),
streamBuffers = require('stream-buffers');
let outputStreamBuffer = new streamBuffers.WritableStreamBuffer({
initialSize: (1000 * 1024), // start at 1000 kilobytes.
incrementAmount: (1000 * 1024) // grow by 1000 kilobytes each time buffer overflows.
});
let archive = archiver('zip', {
zlib: { level: 9 } // Sets the compression level.
});
archive.pipe(outputStreamBuffer);
archive.append("this is a test", { name: "test.txt"});
archive.finalize();
outputStreamBuffer.end();
fs.writeFile('output.zip', outputStreamBuffer.getContents(), function() { console.log('done!'); });
答案 0 :(得分:1)
答案 1 :(得分:1)
至于为什么你看到垃圾,这是因为你看到的是压缩数据,这看起来像垃圾。
要验证压缩是否有效,您可能需要再次解压缩并检查输出是否与输入匹配。
答案 2 :(得分:1)
在您更新的示例中,我认为您在编写内容之前尝试获取内容。
进入结束活动然后获取内容。
outputStreamBuffer.on('finish', () => {
// Do something with the contents here
outputStreamBuffer.getContents()
})
答案 3 :(得分:0)
通过在存档器上添加事件侦听器对我有用:
archive.on('finish', function() {
outputStreamBuffer.end();
// write your file
});