使用Express和Archiver创建zip

时间:2019-03-04 23:56:29

标签: node.js express archive node-archiver

我使用node-archiver压缩文件,如下所示。但是我的zip文件损坏了。

applicationDidEnterBackground(_:)

我修改了代码以直接保存到文件系统。有了这段代码,我得到了在文件系统上创建的有效zip文件。

app.get('/download', async (req, res) => {

    const arch = archiver('zip');
    arch.append('abc', { name: 'abc.txt'});
    arch.append('cdf', { name: 'cdf.txt'});

    res.attachment('test.zip').type('zip');
    arch.pipe(res);
    arch.finalize();
});

为什么通过快速app.get('/download', async (req, res) => { const arch = archiver('zip'); arch.append('abc', { name: 'abc.txt'}); arch.append('cdf', { name: 'cdf.txt'}); const output = fs.createWriteStream('./test.zip'); arch.pipe(output); arch.finalize(); }); 对象发送的zip文件被损坏?解决办法是什么?

编辑: 如果我将输出格式用作res而不是zip,那么它将正常工作。

tar

1 个答案:

答案 0 :(得分:0)

我认为您也需要关闭响应流:

app.get('/download', async (req, res) => {

    const arch = archiver('zip');
    arch.append('abc', { name: 'abc.txt'});
    arch.append('cdf', { name: 'cdf.txt'});

    res.attachment('test.zip').type('zip');
    arch.on('end', () => res.end()); // end response when archive stream ends
    arch.pipe(res);
    arch.finalize();
});