【发布时间】:2020-06-25 18:51:20
【问题描述】:
当我的用户注册时,他们使用的是直接进入 firebase 的个人资料图片。图像正确上传到 Firebase 存储中,但一旦它出现在数据库中,配置文件图像 URL 也会在调试区域中丢失,图像链接显示为可选。我应该在此代码中进行哪些更改才能将图像链接正确上传到 Firebase 数据库?
if let AuthData = AuthDataResult {
print(AuthData.user.email)
var dict : Dictionary < String, Any> = [
"uid": AuthData.user.uid,
"username": self.UsernameTextField.text!,
"email": AuthData.user.email,
"ProfileImageUrl": "",
]
let storage = Storage.storage()
let storageRef = storage.reference()
let imageName = UUID().uuidString
let imageReference = Storage.storage().reference().child(imageName)
//2. Compress quality
if let uploadData = self.ProfileImage.image?.jpegData(compressionQuality: 0.5){
//3. Save image as .jpeg
let metaDataForImage = StorageMetadata()
metaDataForImage.contentType = "image/jpeg"
//4. Add the data to Firebase Storage
imageReference.putData(uploadData, metadata: metaDataForImage) { (meta, err) in
if let err = err{
print(err.localizedDescription)
} else {
//5. Retrieving the image URL
imageReference.downloadURL { (url, err) in
if let err = err{
print(err.localizedDescription)
} else {
//6. Print the complete URL as string
let urlString = url?.absoluteString
print(urlString)
}
Database.database().reference().child("users").child(AuthData.user.uid).updateChildValues(dict, withCompletionBlock: { (error,ref) in
if error == nil {
print("Done")
return
}
【问题讨论】:
-
我看不到您将 URL 写入数据库的位置。确保在
imageReference.downloadURL { (完成时调用的闭包 inside 执行此操作,因此 *inside 与步骤 6 的代码块相同。 -
@FrankvanPuffelen 在尝试格式化此代码后(它有些不完整)。我认为问题出在
.updateChildValues(dict,因为没有dict数据填充了要写入的url。此外,如果出现错误(例如AuthData.user.uid无效),则不会捕获错误,代码只会静默失败。 -
嘿,Jay,我感觉代码仍然不完整。如果不是:您的猜测听起来确实不错,所以如果您觉得可以帮助 OP,请写下答案。
-
AuthData @Jay 没有错误
-
但是没有错误处理代码你怎么知道?代码格式不正确,但似乎所有代码都是
AuthDatavar 的一部分?最佳实践是用小写命名变量...大写类和结构名称。
标签: ios swift firebase firebase-realtime-database firebase-storage