我有一个脚本可以按需构建 zip 文件。使用 Cloud Functions 本地模拟器在本地运行得很好。部署后,它不会传输响应。构建整个 zip 响应,然后发送。我知道发生这种情况是因为正在设置内容长度响应标头,而这在本地没有发生。
如何让 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();
};
Run Code Online (Sandbox Code Playgroud) 我们无法让 SSE 从 Google Cloud Run 上的容器发送。我试过用一个简单的 SSE 示例(https://github.com/kljensen/node-sse-example)来托管一个容器,看看它是否在我们的库中——不。
我从服务器看到客户端连接(就像最初的 GET 工作一样),但没有从服务器发送事件。该EventSource客户端从不改变CONNECTING到CONNECTED。
从 Cloud Run 文档来看,是否支持这有点含糊不清(强调我的):
Cloud Run(全代管式)目前不支持 HTTP 流式传输。因此,不支持使用 WebSockets 和 gRPC(流式 RPC)等协议的入站请求。
作为一个例外,Cloud Run(全托管式)服务支持用于入站请求的一元 gRPC。
对于出站请求,Cloud Run(完全托管)支持 WebSockets 和 gRPC。
SSE 不会算作出站请求,还是我误解了?