云功能响应流

时间:2018-01-19 03:50:15

标签: node.js google-cloud-functions node-archiver

我有一个按需构建zip文件的脚本。它使用云功能本地仿真器在本地工作得很好。部署后,它不会流式传输响应。构建整个zip响应,然后发送。我知道这种情况正在发生,因为正在设置内容长度响应标头,这不会在本地发生。

如何让云功能流式传输响应?

exports.zip = (req, res) => {
    const zipRequest = {
        media: [{
            'url': 'https://storage.googleapis.com/...',
            'file': 'file1.jpg'
        }, {
            'url': 'https://storage.googleapis.com/...',
            'file': 'file2.jpg'
        }, {
            'url': 'https://storage.googleapis.com/...',
            'file': 'file3.jpg'
        }],
        filename: 'photos.zip'
    };

    res.attachment(zipRequest.filename);
    res.setHeader('Content-Type', 'application/zip');

    let zip = Archiver('zip');
    zip.on('end', () => {
      res.end();
    });

    zip.pipe(res);
    zipRequest.media.forEach((file) => {
        zip.append(request.get(file.url), { name: file.name });
    });

    zip.finalize();
};

1 个答案:

答案 0 :(得分:1)

目前无法对响应进行流式处理,因为它将缓冲响应,因为基础架构的实现方式以及现在无法解决问题,这意味着在响应关闭之前它不会看到结果。 / p>