【问题标题】:How to set up profile image from firebase database如何从 Firebase 数据库设置个人资料图片
【发布时间】:2020-01-22 22:49:58
【问题描述】:

嘿,我是 Xcode 的新手,需要帮助将我的个人资料图片从 firebase 数据库上传到我的用户个人资料。到目前为止我没有收到任何错误,但是当我的用户登录时图像没有出现,图像已经存储在 firebase 但是当我将 UIImageView 附加到用户配置文件时,图像显示为空白有没有人有解决此代码的解决方案让我的图像在用户登录后出现在用户个人资料中应该是自动的吗?

               typealias blockCompletedWith = (Bool, String) -> Void


               //path: folder name if any followed by name of image
  func uploadImageToFirebaseStorage(data: Data, path: String, blockCompletedWith: @escaping blockCompletedWith) {
                     let metadata = StorageMetadata()
                      metadata.contentType = "profileImage.jpg"

                    let store = Storage.storage()
                    let storeRef = store.reference().child(path)
                    let _ = storeRef.putData(data, metadata: metadata) { (metadata, error) in
                       guard let _ = metadata else {
                       print("error occured: \(error.debugDescription)")
                            blockCompletedWith(false, "")
                                    return
                                                  }

                storeRef.downloadURL(completion: { (url, error) in
                     if let urlText = url?.absoluteString {
                     blockCompletedWith(true, urlText)
                                                      }
                                             else {
                                blockCompletedWith(false, "")
                                                      }
                                                  })
                                              }
                                          }


               if let profileImageUrl = dictionary?["gs://tunnel-vision-d6825.appspot.com"] as? String {
                  let url = URL(string: profileImageUrl)
                       URLSession.shared.dataTask(with: url!) { (data, response, error) in
                               if let error = error{
                               print("Error : \(error)")
                    return
                                }
                                    DispatchQueue.main.async {
                                    self.ProfileImage.image = UIImage(data: data!)
                                            }
                    }.resume()

                        }

【问题讨论】:

    标签: ios image firebase firebase-realtime-database uiimageview


    【解决方案1】:

    使用 firebase 存储来保存图像并将图像链接放入您的数据库。

    typealias blockCompletedWith = (Bool, String) -> Void
    
    func uploadProfileImage(_ image: UIImage) {
            let imageData = image.jpegData(compressionQuality: 1.0)
            let path = "folderName/imagename.jpeg"
            self.uploadImageToFirebaseStorage(data: imageData!, path: path, blockCompletedWith: { (isSuccess, urlStr) in
                Utility.stopActivityIndicator()
                DispatchQueue.main.async {
                    if isSuccess {
                        print(urlStr)
                    }
                    else {
                        print("Error in uploading Image")
                    }
                }
            })
        }
    

    -----------uploadImageToFirebaseStorage 方法------------

    //path: folder name if any followed by name of image
    func uploadImageToFirebaseStorage(data: Data, path: String, blockCompletedWith: @escaping blockCompletedWith) {
            let metadata = StorageMetadata()
            metadata.contentType = "image/jpeg"
    
            let store = Storage.storage()
            let storeRef = store.reference().child(path)
            let _ = storeRef.putData(data, metadata: metadata) { (metadata, error) in
                guard let _ = metadata else {
                    print("error occured: \(error.debugDescription)")
                    blockCompletedWith(false, "")
                    return
                }
    
                storeRef.downloadURL(completion: { (url, error) in
                    if let urlText = url?.absoluteString {
                        blockCompletedWith(true, urlText)
                    }
                    else {
                        blockCompletedWith(false, "")
                    }
                })
            }
        }
    

    【讨论】:

    • 什么是 (self.uploadImageToFirebaseStorage) @MohitKumar
    • 这一行调用了答案中写的第二个方法。我已经用明确的分隔更新了答案。现在清楚了吗?
    • 是的,我明白了,但我该如何解决这个错误('ProfileViewController' 类型的值没有成员'uploadImageToFirebaseStorage')@MohitKumar
    • 只需复制第二种方法并粘贴到您的视图控制器中。
    • 图片仍然没有出现@MohitKumar
    猜你喜欢
    • 2021-01-15
    • 2020-06-25
    • 2014-09-15
    • 2020-09-05
    • 2015-05-22
    • 2018-12-27
    • 2011-05-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多