【发布时间】:2018-07-12 06:50:11
【问题描述】:
我对使用 react redux firebase Web 应用访问存储在 Firebase 存储中的一堆图像的适当方式感到困惑。简而言之,我很想了解一下,一旦将照片上传到 Firebase 存储,您将如何将其链接到 Firebase 数据库(就像您要存储的快照返回的确切内容一样),然后访问它(如果它不只是<img src={data.downloadURL} />),以及当照片被覆盖时您将如何处理(如有必要)更新该链接。 如果你能回答这个问题,请随意跳过其余部分......
我遇到的两个选项是
- 将完整的 URL 存储在我的 Firebase 数据库中,或者
- 少存储一些东西,比如存储桶中的路径,然后为每张照片调用 downloadURL()...这似乎有很多不必要的流量,不是吗?
我现在的数据库结构是这样的:
{
<someProjectId>: {
imgs: {
<someAutoGenId>: {
"name":"photo1.jpg",
"url":"https://<bucket, path, etc>token=<token>"
},
...
},
<otherProjectDetails>: "",
...
},
...
}
继续使用该结构和列出的第一个想法,当照片被覆盖时我遇到了麻烦,所以我需要遍历图像列表并删除与名称匹配的数据库记录(或找到它并更新它的网址)。我可以做到这一点(最多,我需要替换两个带有旧令牌的参考),但后来我看到人们通过选项 2 这样做,尽管不一定符合我的确切情况。
我最后一次看到的最后一件事是类似的问题,一般回复指向 Cloud Functions,我将在发布后立即进行调查,但我不确定这是否让我的情况过于复杂,所以我想问起来不会有太大的伤害。我最初看到/阅读了 Cloud Functions 以及 Firebase 的数据库是“实时的”这一事实,但不确定它是否在 React/Redux 环境中运行良好。无论如何,我将不胜感激,谢谢。
【问题讨论】:
-
我忘了提到我目前正在考虑的第三个选项,即允许对 firebase 存储桶进行无限制的读取访问,然后在将 url 保存到数据库时省略令牌。最后保持“alt”变量(设置为“media”),我可以得到要渲染的图片,然后当图像被覆盖时,数据库中没有什么可以更新的。目前,这对我来说是一个可行的解决方案,但我将尝试找出一个涉及 Cloud Functions 的解决方案,因为这似乎是类似问题的首选答案。
标签: reactjs firebase-realtime-database react-redux firebase-storage google-cloud-functions