Поток ответа Cloud Function

У меня есть скрипт, который строит ZIP-файл по требованию. Он отлично работает локально, используя эмулятор Cloud Functions Local. При развертывании ответ не передается. Весь почтовый ответ строится, а затем отправляется. Я знаю, что это происходит потому, что устанавливается заголовок ответа на длину содержимого, который не происходит локально.

Как я могу получить Cloud Functions для потоковой передачи ответа?

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 ответ

Решение

В настоящее время нет способа потоковой передачи ответа, поскольку он будет буферизовать ответ из-за того, как реализована инфраструктура, и сейчас нет способа обойти его, что означает, что он не увидит результаты, пока ответ не будет закрыт.

Другие вопросы по тегам