一尘不染

动态创建zip并将其流式传输到客户端

node.js

我正在使用NodeJ(带有Express),并且试图将zip文件流式传输回客户端。zip中包含的文件不在文件系统上,而是动态创建的。我想将文件内容流式传输到zip并将流式传输回客户端。

IE浏览器,我希望客户端收到:

tmp.zip
 --> 1.txt
 --> 2.txt
 --> 3.txt

快速创建1,2,3.txt并将其流式传输到zip文件。这可能吗?


阅读 331

收藏
2020-07-07

共1个答案

一尘不染

存档器具有一个append方法,使您可以将文本另存为文件。要将数据“流化”给用户,您可以简单地通过管道传递到HTTP响应对象。

var Http = require('http');
var Archiver = require('archiver');

Http.createServer(function (request, response) {
    // Tell the browser that this is a zip file.
    response.writeHead(200, {
        'Content-Type': 'application/zip',
        'Content-disposition': 'attachment; filename=myFile.zip'
    });

    var zip = Archiver('zip');

    // Send the file to the page output.
    zip.pipe(response);

    // Create zip with some files. Two dynamic, one static. Put #2 in a sub folder.
    zip.append('Some text to go in file 1.', { name: '1.txt' })
        .append('Some text to go in file 2. I go in a folder!', { name: 'somefolder/2.txt' })
        .file('staticFiles/3.txt', { name: '3.txt' })
        .finalize();

}).listen(process.env.PORT);

这将使用两个文本文件创建一个zip文件。访问该页面的用户将看到文件下载提示。

2020-07-07