Dynamically create and stream zip to client

后端 未结 4 1308
滥情空心
滥情空心 2020-12-02 11:36

I am using NodeJs (w/express) and I am trying to stream a zip file back to the client. The files contained in the zip do not live on the file system, rather they are create

4条回答
  •  南方客
    南方客 (楼主)
    2020-12-02 12:14

    Archiver has an append method that lets you save text as a file. To "stream" that data to the user you can simply pipe to the HTTP response object.

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

    This will create a zip file with the two text files. The user visiting this page will be presented with a file download prompt.

提交回复
热议问题