添加&的最佳方式将个人资料照片存储到Swift的Firebase

时间:2017-08-14 04:20:53

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

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

问题是我不知道如何使用Image Picker做简单,因为在同一个屏幕上有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
      ...

你有建议或具体的例子可以帮助我吗?

1 个答案:

答案 0 :(得分:0)

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

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])
            }
        })
    }