node.js压缩ZIP到内存

我想压缩一些数据到一个writableStream。

目的是在内存中完成所有操作,而不是在磁盘上创build实际的zip文件。

仅用于testing,我在磁盘上创build一个ZIP文件。 但是,当我尝试打开output.zip我得到以下错误:“存档是在未知的格式或损坏”。 (Windows 7的WinZip,MAC也有类似的错误)

我究竟做错了什么?

 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!'); }); 

您并不是等待将内容写入输出stream。

注释掉outputStreamBuffer.end(); 从你的代码,并将其更改为以下…

 outputStreamBuffer.on('finish', function () { fs.writeFile('output.zip', outputStreamBuffer.getContents(), function() { console.log('done!'); }); });