node.js-在输出为缓冲区的位置使用archiver
我想把一些可读的流压缩成一个可写的流。 其目的是在内存中完成所有操作,而不是在磁盘上创建实际的zip文件 为此,我使用了archivernode.js-在输出为缓冲区的位置使用archiver,node.js,archiverjs,Node.js,Archiverjs,我想把一些可读的流压缩成一个可写的流。 其目的是在内存中完成所有操作,而不是在磁盘上创建实际的zip文件 为此,我使用了archiver let bufferOutput = Buffer.alloc(5000); let archive = archiver('zip', { zlib: { level: 9 } // Sets the compression level. }); archive.pipe
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!'); });
缓冲区不是流,你需要一些类似于的东西。缓冲区不是流,你需要一些类似于的东西。至于你为什么看到垃圾,这是因为你看到的是压缩的数据,这看起来像垃圾
要验证压缩是否有效,您可能需要再次解压并检查输出是否与输入匹配。至于您看到垃圾的原因,这是因为您看到的是压缩后的数据,看起来像垃圾
要验证压缩是否有效,您可能需要再次解压缩并检查输出是否与输入匹配。在您更新的示例中,我认为您正在尝试在写入内容之前获取内容
钩住finish事件,然后获取内容
outputStreamBuffer.on('finish', () => {
// Do something with the contents here
outputStreamBuffer.getContents()
})
在您更新的示例中,我认为您试图在编写之前获取内容
钩住finish事件,然后获取内容
outputStreamBuffer.on('finish', () => {
// Do something with the contents here
outputStreamBuffer.getContents()
})
通过在archiver上添加事件侦听器,我可以:
archive.on('finish', function() {
outputStreamBuffer.end();
// write your file
});
通过在archiver上添加事件侦听器,我可以:
archive.on('finish', function() {
outputStreamBuffer.end();
// write your file
});
Thx Dave,我已经添加了一个后续问题,如果你也能帮上忙Thx Dave,我已经添加了一个后续问题,如果你也能帮上忙,我只是注意到它实际上卡在了“outputStreamBuffer.getContents().pipe(output);”上,并且没有处理DAH,因为,outputStreamBuffer.getContents()
给了你一个缓冲区而不是流,因此它没有pipe()
函数。只需执行fs.writeFile('output.zip',outputStreamBuffer.getContents(),function(){console.log('done!');})代码>嗯。。。还是不为我工作。如果你能看一下,我已经更新了我的问题。非常感谢您的帮助我刚刚注意到它实际上卡在了“outputStreamBuffer.getContents().pipe(output);”上,并且没有处理DAH,因为,outputStreamBuffer.getContents()
给了您一个缓冲区而不是流,所以它没有pipe()
函数。只需执行fs.writeFile('output.zip',outputStreamBuffer.getContents(),function(){console.log('done!');})代码>嗯。。。还是不为我工作。如果你能看一下,我已经更新了我的问题。谢谢你的帮助