【发布时间】:2018-08-28 17:50:01
【问题描述】:
我在 firebase 上编写了一个函数,它从 firebase 存储下载图像(base64)并将其作为响应发送给用户:
const functions = require('firebase-functions');
import os from 'os';
import path from 'path';
const storage = require('firebase-admin').storage().bucket();
export default functions.https.onRequest((req, res) => {
const name = req.query.name;
let destination = path.join(os.tmpdir(), 'image-randomNumber');
return storage.file('postPictures/' + name).download({
destination
}).then(() => {
res.set({
'Content-Type': 'image/jpeg'
});
return res.status(200).sendFile(destination);
});
});
我的客户多次之后调用该函数(串联)以加载一系列图像以供显示,ca。 20 个,平均大小为 4KB。
在加载了 10 张左右的图片(数量不同)后,所有其他图片都失败了。原因是我的函数没有正确响应,firebase 控制台显示我的函数抛出了错误:
上图显示
- 对函数(称为“PostPictureView”)的请求成功
- 之后,对控制器的三个请求失败
- 最后,在对“UserLogin”函数执行新请求后,同样失败。
给客户端的响应是默认的“错误:无法处理请求”。等待几秒钟后,所有请求都会再次按原样处理。
我的最佳猜测:
- 该项目处于免费层,也许谷歌正在限制某些东西? (我没有达到任何限制)
- Google Firebase 控制台可以处理的消息是否有限制?
- functions-app 中的 tmpdir 是否运行不足?到目前为止,我从未删除过临时文件,但希望谷歌会自动删除它们,或者以不同的方式警告我空间不足。
是否有人知道接收错误消息的替代方法,或者遇到过类似的问题? (由于 Firebase Functions 仍处于测试阶段,也可能是来自 google 的错误)
顺便说一句:直接从客户端(android app,react-native)下载图像是不可能的,因为我稍后会使用该功能检查访问权限。这个问题对我来说是可重现的。
【问题讨论】:
-
image-randomNumber是您正在下载的文件的字面名称,还是实际上包含一些随机数? -
不,它实际上包含一个随机字符串:
let destination = path.join(os.tmpdir(), 'image-' + Math.random().toString(36).substring(7));只是为了便于阅读在上面进行了简化。
标签: node.js firebase google-cloud-functions firebase-storage