我正在尝试使用来自Firebase云功能的http触发器将响应发送回客户端。 当我使用Cloud Storage中的文件位置发送响应时,sendFile方法会引发以下错误:
"path must be absolute or specify root to res.sendFile"
res.sendFile(obj.path(param1, param2, param3, param4));
obj.path(参数1,参数2,参数3,param4)此建立一个路径GS://或HTTPS://与PARAMS
然后我决定这样做:
const rp = require("request-promise");
exports.fun = functions.https.onRequest( async (req, res) => {
let extResponse = await rp('firebase storage location');
extResponse.pipe(res);
});
rp现在返回此错误:
StatusCodeError: 403 - "{\n \"error\": {\n \"code\": 403,\n \"message\": \"Permission denied. Could not perform this operation\"\n }\n}"
此错误是因为云存储需要请求,以便让服务下载从存储区的文件进行认证。
有没有一种方法,使这项工作,并返回该文件返回给客户端?
答案 0 :(得分:2)
sendFile不起作用,因为它不理解URL。它仅了解本地文件系统上的文件。您应该使用Cloud Storage SDK for node来执行此操作。创建一个File对象,该对象指向您要发送的文件,在其上打开一个读取流,然后将该流传递给响应:
const file = ... // whatever file you want to send
const readStream = file.createReadStream()
readStream.pipe(res)