云函数响应流
Cloud Function response stream
我有一个按需构建 zip 文件的脚本。使用 Cloud Functions Local Emulator,它在本地运行良好。部署后,它不会流式传输响应。构建整个 zip 响应,然后发送。我知道发生这种情况是因为正在设置 content-length 响应 header,这不会在本地发生。
如何让 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();
};
目前无法流式传输响应,因为它会根据基础架构的实施方式缓冲响应,并且目前没有办法解决它,这意味着在响应关闭之前它不会看到结果.
我有一个按需构建 zip 文件的脚本。使用 Cloud Functions Local Emulator,它在本地运行良好。部署后,它不会流式传输响应。构建整个 zip 响应,然后发送。我知道发生这种情况是因为正在设置 content-length 响应 header,这不会在本地发生。
如何让 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();
};
目前无法流式传输响应,因为它会根据基础架构的实施方式缓冲响应,并且目前没有办法解决它,这意味着在响应关闭之前它不会看到结果.