如何通过他们的uid的Swift Firebase获取图片?

时间:2017-04-04 01:52:52

标签: ios swift firebase firebase-realtime-database firebase-storage

我正在尝试显示当前用户发布的所有图片。正如您在表格视图中所看到的,每当当前用户发布图像时,它会自动为当前用户信息下的图像创建唯一ID。

screenshot

在此图像中,您将看到当用户发布图像时,它会为其图像创建一个名为media的节点。

screenshot

这是我的代码:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "CellMe", for: indexPath) as! MyPosttTableViewCell


    FIRDatabase.database().reference().child("users").child(FIRAuth.auth()!.currentUser!.uid).observeSingleEvent(of: .value, with: { (snapshot) in
    // check if user has photo
    if snapshot.hasChild("media") != nil{
        print("found it")

     //set image locatin
    let filePath = "\(FIRAuth.auth()!.currentUser!.uid)/\("media")"


    FIRStorage.storage().reference().child(filePath).data(withMaxSize: 10*1024*1024, completion: { (data, error) in

    let userPhoto = UIImage(data: data!)
    cell.Myimages.image = userPhoto

    })

    }
    else {
        print("nil")
        }
        })

        return cell


    }}

2 个答案:

答案 0 :(得分:0)

用户节点中的媒体存储为NSDictionary,而不是String。您必须遍历媒体节点才能获取所有文件的路径。你可以做点什么

//Create reference to media directly instead
FIRDatabase.database().reference().child("users").child(FIRAuth.auth()!.currentUser!.uid).child("media").observeSingleEvent(of: .value, with: { (snapshot) in
  if let media = snapshot.value as? NSDictionary {

    //Loop thorugh all the entries in your media node to get all the media paths
    for (_, value) in media {
      FIRStorage.storage().reference().child("media").child(value as! String)

      //get the file now that you have the reference
    }
  }
})

答案 1 :(得分:0)

如果要将图像添加到特定ID,那么将图像上传到firebase存储区,以绝对字符串形式获取image.downloadurl,并将此值添加到密钥" image"到您的对象,然后将对象发布到firebase数据库。