【发布时间】:2019-06-21 04:27:25
【问题描述】:
我想将图像存储在 firebase 存储中并创建 url,而不是从我当前在 firebase 的数据库中更新值,但它没有从当前用户存储在 firebase 数据库中。这是我的代码,我哪里做错了?
fileprivate func saveToFirebase(image: UIImage) {
guard let imageData = image.jpegData(compressionQuality: 0.3) else { return }
let uuidName = UUID().uuidString
Storage.storage().reference().child("profile_images").child(uuidName).putData(imageData, metadata: nil) { (metadata, error) in
if let err = error {
print("???? -- Failed to upload images -- ????")
print("???? -- \(err) -- ????")
return
}
metadata?.storageReference?.downloadURL(completion: { (url, error) in
if let err = error {
print("???? -- Failed to create URL -- ????")
print("???? -- \(err) -- ????")
return
}
guard let profileImageURL = url?.absoluteString else { return }
guard let currentUID = Auth.auth().currentUser?.uid else { return }
let userProfileURL = ["profileImageURL": profileImageURL]
Database.database().reference().child("users").child(currentUID).updateChildValues(userProfileURL, withCompletionBlock: { (error, reference) in
if let err = error {
print("???? -- Failed to create URL -- ????")
print("???? -- \(err) -- ????")
return
}
print("✅ -- Successfully update user data -- ✅")
})
})
}
}
【问题讨论】:
-
您有几种可能导致静默失败的情况,例如您的保护语句返回 void,以及用于下载元数据 URL 的可选链接调用。将一些 cmets 添加到代码的这些部分,以便您可以准确区分导致问题的原因。
-
@Callam 所以我需要使用 if let 而不是 guard let?
-
当你尝试
metadata?.storageReference?.downloadURL
标签: swift firebase firebase-realtime-database firebase-storage