swift - 如何从 Firebase 存储中获取 imageUrl 并将其存储在 Xcode 10 swift 4.2 中的 firebase 数据库中
问题描述
这是我正在使用的代码
@objc func handleSignUp() {
guard let email = emailTextField.text, email.characters.count > 0 else { return }
guard let username = usernameTextField.text, username.characters.count > 0 else { return }
guard let password = passwordTextField.text, password.characters.count > 0 else { return }
Auth.auth().createUser(withEmail: email, password: password, completion: { (user, error) in
if let err = error {
print("Failed to create user:", err)
return
}
print("Successfully created user:", user?.user.uid)
// guard let image = self.plusPhotoButton.imageView?.image else { return }
// guard let uploadData = UIImageJPEGRepresentation(image, 0.3) else { return }
guard let uploadData = self.plusPhotoButton.imageView?.image?.jpegData(compressionQuality: 0.3) else{return}
let filename = NSUUID().uuidString
Storage.storage().reference().child("profile_images").child(filename).putData(uploadData, metadata: nil, completion: { (metadata, err) in
if let err = err {
print("Failed to upload profile image:", err)
return
}
//this code isn't correct for swift4.2
//guard let profileImageUrl = metadata?.downloadURL()?.absoluteString else { return }
func getDownloadURL(from path: String, completion: @escaping (URL?, Error?) -> Void) {
let storageReference = Storage.storage().reference(forURL: "gs://instagramfirebase-60be5.appspot.com")
let storageRef = storageReference.child(path).downloadURL(completion: completion)
}
print("Successfully uploaded profile image")//,profileImageUrl
guard let uid = user?.user.uid else { return }
let dictionaryValues = ["username": username] as [String : Any]//, "profileImageUrl": profileImageUrl
let values = [uid: dictionaryValues]
Database.database().reference().child("users").updateChildValues(values, withCompletionBlock: { (err, ref) in
if let err = err {
print("Failed to save user info into db:", err)
return
}
print("Successfully saved user info to db")
})
})
})
}
快照如下:
我对如何imageUrl
从 Firebase 存储中获取并将其存储在 Xcode 10 swift 4.2 中的 firebase 数据库中感到困惑
请帮忙,谢谢你的时间。
解决方案
您可以通过在图片上传的闭包中使用以下代码轻松获取下载网址:
storageRef.downloadURL(completion: { (url, error) in
if let err = error{
// error happened - implement code to handle it
print(err)
} else {
// no error happened; so just continue with your code
print(url?.absoluteString) // this is the actual download url - the absolute string
}
请注意:不要单独存储 downloadURL,因为 Firebase 可以更改 downloadURL 的令牌,我建议始终掌握完整的存储路径。
我希望我能提供帮助。
推荐阅读
- amazon-web-services - 试图让 lambda 使用基于 S3 资源的策略访问 S3,为什么它不起作用?
- java - 我如何解释“'”符号(分配给变量中的名称),因为它导致我的 SQLite 查询失败
- php - Symfony 中的每个响应如何获取对象?
- javascript - 如何为动态添加的元素添加 onclick 动作(在 vanilla JS 中)?
- .net - 为什么 .NET Core 和 .NET 5 会生成可执行文件?
- java - 将位转换为双精度后,如何在不使用 BigDecimal 的情况下存储实际的浮点/双精度值?
- sql - 在 oracle 的另一个 case 语句中使用 case 语句的结果
- swift - AudioKit:调用“AudioKit.stop()”后无法重新启动 AudioKit 频率采样
- bootstrap-table - 如何将自定义工具栏图标与默认工具栏图标集成
- php - Laravel - 在会话和测试之后显示警报的最佳实践