使用多个上传更新Firebase数据库对象

时间:2018-09-04 21:58:03

标签: swift firebase firebase-realtime-database

我有一个发布对象,该对象包含两个部分:(1)照片和(2)视频。在发布流程中,用户选择并成像,然后在他们选择视频的下一个屏幕旁边点击。照片和视频都作为发布对象的一部分上传到Firebase。参见简单设计。

线框设计

enter image description here

我很难同时创建带有照片URL和视频URL的post对象。我尝试过:

1-选择照片并转到下一步后,我将照片上传到Firebase存储,并在数据库中创建带有照片URL和视频URL空字符串的post对象。

2-然后选择视频后,我将视频上传到Firebase存储,并尝试使用视频URL更新现有的post对象...

但是,我无法更新正确的帖子对象,并且不知道如何获取postByAutoID来更新正确的帖子。

这是数据库对象的样子:

enter image description here

我试图将photoURL传递到帖子的第二部分,但是在传递变量时,URL的上传和生成还没有完成。

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

使用Web或JavaScript,将上载到Firebase云存储返回承诺,因此Promise.all包含一系列单独的上载。

对于Swift或IOS,您将必须将每个上载(.putData)推送到内存,然后对其进行迭代/循环。

请参见Upload Files on iOS,其中提供了一个起点并添加了循环/迭代。

// Data in memory
let data = Data()

// Create a reference to the file you want to upload
let riversRef = storageRef.child("images/rivers.jpg")

// Upload the file to the path "images/rivers.jpg"
let uploadTask = riversRef.putData(data, metadata: nil) { (metadata, error) in
  guard let metadata = metadata else {
    // Uh-oh, an error occurred!
    return
  }
  // Metadata contains file metadata such as size, content-type.
  let size = metadata.size
  // You can also access to download URL after upload.
  riversRef.downloadURL { (url, error) in
    guard let downloadURL = url else {
      // Uh-oh, an error occurred!
      return
    }
  }
}