Поток ответа 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 ответ
Решение
В настоящее время нет способа потоковой передачи ответа, поскольку он будет буферизовать ответ из-за того, как реализована инфраструктура, и сейчас нет способа обойти его, что означает, что он не увидит результаты, пока ответ не будет закрыт.