当前位置: 首页 > 知识库问答 >
问题:

为什么我的Firebase存储URL没有上传到Google Cloud Firestore?

韦锦程
2023-03-14
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
}
db.collection("users").document(uid).setData(["profile_pic_url": uploadProfilePic(), "name": name, "phone_number": phoneNumber, "fcm_token": token, "timestamp": Date()])

我希望图像的下载URL在“profile_pic_url”下上传到Firestore,但这没有发生。相反,它只是一个空的字符串即使该映像已成功地存储到Firebase中。

共有1个答案

李宜然
2023-03-14

不能对包含闭包的函数使用return语句,因为函数将在闭包执行之前返回

而是将函数更改为使用完成处理程序,如

func uploadProfilePic(completion: @escaping (String?, Error?) -> ()) {

然后,一旦获得下载url,就调用处理程序。

    profilePhotosRef.downloadURL { (url, err) in
      completion(url, err)
    }
   self.uploadProfilePic() { (url, error) in

    guard error....

    if let url = url {
      // do your upload here
    }
}
 类似资料:
  • 我试图构建一个,它包括两个按钮,一个用于用相机拍照并上传到Firebase存储,另一个用于从Firebase存储下载图像并在上显示。 现在,我被上传功能卡住了。我可以把照片保存到应用程序目录中。我想上传保存的图片到Firebase存储。

  • 我正在处理一个新的项目,问题是我的firebase存储正在逐渐填充,即使我不使用它,现在它有4.1 GB大。 我没有创建桶,它正在填充。 我尝试做的一件事是查看云控制台中的文件,但所有的文件都是奇怪的格式,我无法打开。 直到现在,我甚至没有使用可能占用该空间的媒体。 我希望有一些关于如何回溯使用的想法。

  • Firebase存储使用490 MB,但尚未初始化存储桶。我无法跟踪这个存储com从哪里来,但是检查Firebase对一个空存储收取0.10美元的费用是很奇怪的。 我在哪里可以删除此存储?为什么firebase因没有存储桶而收费? 目前我正在使用Firebase身份验证、Firestore、实时数据库、主机和其他功能。

  • 我正试图通过Zappa将Django应用程序部署到AmazonLambda。应用程序使用pyzbar,它具有zbar或libzabar0要求。在Dockerfile中,我安装了zbar库,在本地docker文件中,我的代码运行正常。但是,当我执行时,它提供了一个无法找到zbar依赖项的错误<代码>导入错误:找不到zbar共享库 我环顾四周,并遵循以下指南:https://blog.zappa.io

  • 我从Firebase存储中获取图像,用相机拍照,或者从图书馆中挑选一张。当其中一个完成时,我有一个类来存储,以便在需要时使用它。 现在我需要将此图像上传到Firebase存储(修改或新建,无所谓)。Firebase允许我使用以下选项之一:或,每个选项分别需要或。 我怎么能把我的,并从它获得一个或用于上传? -- 或者,为了解决这个问题,当我从Firebase存储中检索图像时,如何获取图像的? 无论

  • 我正在使用以下方法来保存信息。 我已经删除了一些用于访问数据库的代码行。 这是日志猫的描述。 E/StorageException:已发生StorageException。发生未知错误,请检查HTTP结果代码和内部异常以获取服务器响应。代码:-13000 HttpResult:0 E/AndroidRuntime:FATAL EXCEPTION:Firebase Storage-Upload-1