在Firebase中同时上传到数据库和存储

时间:2017-02-21 13:43:45

标签: android firebase firebase-storage

在我的Android应用程序中,我使用客户端扇出同时将数据上传到数据库中的多个位置,以避免出现问题,例如在连接丢失的情况下。以下是Firebase博客的示例代码:

Map updatedUser = new HashMap();
newPost.put("name", "Shannon");
newPost.put("username": "shannonrules");

Firebase ref = new Firebase("https://<YOUR-FIREBASE-APP>.firebaseio.com/");

Map fanoutObject = new HashMap();
fanoutObject.put("/users/1", updatedUser);
fanoutObject.put("/usersWhoAreCool/1", updatedUser);
fanoutObject.put("/usersToGiveFreeStuffTo/1", updatedUser);

ref.updateChildren(fanoutObject); // atomic updating goodness

但是现在我还希望将图像文件与数据一起上传到存储区。是否可以同时做到这一点?

2 个答案:

答案 0 :(得分:2)

我认为您无法同步对Firebase数据库和存储的调用。文档没有在任何地方提到它。

但您知道:如果由于连接丢失而无法发送updateChildren(),则Firebase会保存Public Class myItem Dim TS as DateTime End Class Public myList as ObservableCollection(Of myItem) 中的所有请求。当用户重新连接时,Firebase将按照保存的顺序调度所有缓存的请求。

答案 1 :(得分:0)

执行这两个任务并发的一种方法是先在Storage中确定文件路径,然后启动上传,然后再使用该文件路径更新数据库。这和你一样好。

但是,大多数情况下,您希望将上载文件的“下载URL”存储在数据库中,而不是存储桶中的路径。这使客户端可以更轻松地直接访问内容,而无需先“查找”下载URL。在这种情况下,您确实需要等待存储上载首先完成,从UploadTask获取下载URL,然后使用该字符串更新数据库。 上传完成之前,您无法知道下载网址