gpt4 book ai didi

node.js - 使用express和archiver创建zip

转载 作者:太空宇宙 更新时间:2023-11-04 01:34:25 25 4
gpt4 key购买 nike

我使用 Node 归档器来压缩文件,如下所示。但我的 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();
});

我修改了代码直接保存到文件系统。通过这段代码,我得到了一个在文件系统上创建的工作 zip 文件。

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 文件在通过 Express res 对象发送时会被损坏?解决办法是什么?

编辑:如果我使用输出格式为 tar 而不是 zip,那么它可以正常工作。

const arch = archiver('tar');

最佳答案

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

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();
});

关于node.js - 使用express和archiver创建zip,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54993429/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com