在Swift中添加和存储个人资料照片到Firebase的最佳方式

问题描述:

我有一个屏幕,用户最多可以将4张照片添加到他的个人资料中。这些照片将存储在Firebase上。在Swift中添加和存储个人资料照片到Firebase的最佳方式

问题是,我不知道如何使用图像选择器简单操作,因为在同一屏幕上有4个不同的容器。我也试图找到存储这些照片的最佳方式。

这里是我当前的代码:

func setUserPhoto1 (image : UIImage) { 

    let storage = FIRStorage.storage() 
    let storageRef = storage.reference(forURL: "gs://...com") 

    var data = NSData() 
    data = UIImageJPEGRepresentation(image, 0.8)! as NSData 

    // set upload path 

    let filePath = "\(FIRAuth.auth()!.currentUser!.uid)/\("userPhoto1")" 
    let metaData = FIRStorageMetadata() 
    metaData.contentType = "image/jpg" 

    storageRef.child(filePath).put(data as Data, metadata: metaData){(metaData,error) in 

     if let error = error { 
      print(error.localizedDescription) 
      return 

     }else{ 

      //store downloadURL 

      let downloadURL = metaData!.downloadURL()!.absoluteString 

      //store downloadURL at database 

      self.ref.child("users").child(FIRAuth.auth()!.currentUser!.uid).updateChildValues(["userPhotoUrl1": downloadURL]) 

     } 
    } 
} 

当我尝试在它仍然是被替换的第一张照片相同的方式添加下一个图片(setUserPhoto2)。

我的数据库看起来像:

users 
    - uid 
     - name 
     - photoUrl1 
     - photoUrl2 
     ... 

你有意见或具体的例子,可以帮助我?

每次需要存储新图像时,都会为图像创建新的唯一名称,并将该图像名称存储在与您的名称相对应的数据库中。

let imageName = NSUUID().uuidString 
    let storageRef = Storage.storage().reference().child(uid).child("\(imageName).jpg") 

    if let profileImage = image,let uploadData = UIImageJPEGRepresentation(profileImage, 0.1) { 

     storageRef.putData(uploadData, metadata: nil, completion: { (metadata, err) in 

      if err != nil { 
       print(err!) 
       return 
      } 

      if let profileImageUrl = metadata?.downloadURL()?.absoluteString { 

       let values = ["name": name, "email": email, "profileImageUrl\(referenceNumber)": profileImageUrl] 
       self.registerUserIntoDatabaseWithUID(uid: uid, values: values as [String : AnyObject]) 
      } 
     }) 
    }