如何同步 Firebase 存储和数据库?
Posted
技术标签:
【中文标题】如何同步 Firebase 存储和数据库?【英文标题】:How do I synchronize Firebase Storage and Database? 【发布时间】:2016-11-19 18:22:30 【问题描述】:我还没有找到任何好的文档来告诉我如何处理这个问题。有人可以针对此问题参考任何指导吗?
对于 android 应用,我已经开始使用 Google Firebase Storage 和我的实时数据库,我有一个关于如何确保文件上传和数据库更新按正确顺序进行的问题。
以前,我将音频文件编码为字符串,并将其与其他相关数据一起作为单个哈希映射上传到 FB 数据库,以确保一致性。存储的相关数据是一个 POJO,与用户可以访问哪些音频、音频在数据库中的存储路径等有关。
我的新设置是首先将音频文件上传到 FB Storage,一旦文件上传,触发相关数据的 FB 数据库更新。一旦数据库侦听器指示完成,应用程序将移动到不同的活动。
我担心这两个步骤的过程不稳定(用户在两个任务完成之前离开活动,存储上传被中断并且永远不会发生数据库更新等)。如果数据库信息未更新,则不会通知其他用户该音频文件已在线,并且他们将无法在数据库中存储引用该文件的路径。
在新的 Google Firebase 中构建同步存储和数据库上传的正确顺序是什么?
谢谢, 安迪
【问题讨论】:
您能否举例说明您正在存储的数据以及如果它们不同步会发生什么? @cricket_007 我更新了上面的文字--存储的数据是一个 POJO,它跟踪谁可以访问该文件,是什么用户上传的,文件路径是什么。它还用于通知某些用户已上传他们可以访问的文件。如果文件已上传但数据库未更新,则音频文件的文件路径可能会丢失,并且应用程序将无法跟踪用户上传下一个文件的顺序。 大家好,我还没有找到任何好的文档来告诉我如何管理这个问题。有人有什么建议吗? 您可以edit 将您的问题放到首页顶部。您的评论只回复我。 啊。这就是它的工作原理。细节,细节。谢谢! 【参考方案1】:不知道为什么还没有可靠的答案。无论如何,我遇到了非常相似的问题,最终使用完成块(正是你在问题中描述的方式)使用嵌套更新。
最近,Firebase 引入了云功能。我正在利用它来观看上传的文件,然后使用云功能在 FB 数据库中创建元数据条目。
基本上,我使用 childByAutoId() 来生成用于命名文件的密钥。例如,个人资料图片保存在“gs://bucket-id/profile_pictures/somerandomkey.jpeg”。然后,我使用文件名中的密钥在我的 FB 数据库中创建一个元数据条目,并使用云功能。
我不确定是否有更好的方法,但使用云函数似乎比嵌套更新方法更好。
【讨论】:
【参考方案2】:您可以使用 Firebase 存储上传图片,成功后您将获得该图片的可下载网址。然后将所有值放入自定义对象中,包括该图像 URL,并将该对象保存在 Firebase 的实时数据库中。 您可以通过从实时数据库中检索对象来使用图像 URL。
【讨论】:
以上是关于如何同步 Firebase 存储和数据库?的主要内容,如果未能解决你的问题,请参考以下文章
如何从与 Firebase 数据库同步的 ArrayList 中删除条目?
利用 Firebase 和 Google App Engine 将后台逻辑添加到实时数据