为啥我的 Firebase 存储 URL 没有上传到 Google Cloud Firestore?
Posted
技术标签:
【中文标题】为啥我的 Firebase 存储 URL 没有上传到 Google Cloud Firestore?【英文标题】:Why aren't my Firebase Storage URLs uploading to Google Cloud Firestore?为什么我的 Firebase 存储 URL 没有上传到 Google Cloud Firestore? 【发布时间】:2019-12-29 13:20:33 【问题描述】:我正在尝试允许用户将个人资料照片上传到 Firebase 存储。图片是在我的应用注册过程中上传的。图片正在正确上传到 Firebase 存储,但是下载 URL 没有上传到 Google Cloud Firestore。
我已经尝试将String
类型的变量downloadURL
更改为空的String
。这并没有改变结果。
以下是将个人资料照片上传到 Firebase 存储的代码:
func uploadProfilePic() -> String
guard let imageData = profilePic?.jpegData(compressionQuality: 0.75) else
print("Unable to get image data.")
return ""
let imageID = UUID().uuidString
let profilePhotosRef = Storage.storage().reference().child("profilePhotos/\(imageID).jpg")
let uploadMetadata = StorageMetadata()
uploadMetadata.contentType = "image/jpeg"
var downloadURL = String()
profilePhotosRef.putData(imageData, metadata: uploadMetadata) (downloadMetadata, err) in
if let err = err
self.showAlertWithOK(title: "An Error Occurred", message: "There was an error uploading your profile photo. Try again later in Hostend settings.")
print("An error occurred: \(err.localizedDescription)")
profilePhotosRef.downloadURL (url, err) in
if let url = url
downloadURL = url.absoluteString
return downloadURL
以下是将个人资料照片下载 URL 上传到 Cloud Firestore 的代码:
db.collection("users").document(uid).setData(["profile_pic_url": uploadProfilePic(), "name": name, "phone_number": phoneNumber, "fcm_token": token, "timestamp": Date()])
uploadProfilePic()
方法返回一个String
。
我希望将图片的下载 URL 上传到 Firestore 中的“profile_pic_url”下,但这并没有发生。相反,它只是一个空的String
,即使图像已成功传输到 Firebase 存储。
【问题讨论】:
你console.log()
ed 你的方法返回uploadProfilePic()
了吗?
【参考方案1】:
您不能对包含闭包的函数使用 return 语句,因为该函数将在闭包执行之前返回。
改为更改您的函数以使用完成处理程序,例如
func uploadProfilePic(completion: @escaping (String?, Error?) -> ())
然后,一旦您获得下载 url,就调用处理程序。
profilePhotosRef.downloadURL (url, err) in
completion(url, err)
然后您可以使用此函数来填充您对 Cloud Firestore 的调用,就像这样
self.uploadProfilePic() (url, error) in
guard error....
if let url = url
// do your upload here
【讨论】:
以上是关于为啥我的 Firebase 存储 URL 没有上传到 Google Cloud Firestore?的主要内容,如果未能解决你的问题,请参考以下文章
为啥无法使用 Google Firebase 存储中的下载 URL 打开上传的文件?
为啥这不能检索 Firebase 存储上图像的下载 URL?