node.js将ZIP压缩到内存

时间:2017-07-21 14:52:23

标签: javascript node.js zip

我想将一些数据压缩成一个writableStream。

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

仅供测试,我在磁盘上创建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!'); });

1 个答案:

答案 0 :(得分:4)

您不是在等待将内容写入输出流。

从您的代码中注释掉outputStreamBuffer.end();并将其更改为以下内容......

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