我有一个屏幕,用户可以逐个将最多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
...
你有建议或具体的例子可以帮助我吗?
答案 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])
}
})
}