【问题标题】:Trying to make a constant that is an UIImageurl in Firebase试图在 Firebase 中创建一个 UIImageurl 常量
【发布时间】:2020-05-24 13:11:13
【问题描述】:

我遇到的麻烦是在firebase中制作一个常量,它是一个uiimageurl的字符串。我将 url 存储在 firebase 数据库中。它看起来像这样:

在以前版本的 firebase 和 swift 中,您只需这样做即可:

let imageUrl = User.profileImageUrl

现在这不起作用,我需要找到有关如何执行此操作的更新版本。非常感谢您的回答,非常感谢!

【问题讨论】:

    标签: ios swift firebase firebase-realtime-database firebase-storage


    【解决方案1】:

    您需要先保存图像。然后,您将能够获取保存图像的 url。这是一个例子。

    func saveButtonPressed() {
        let storageRef = Storage.storage().reference(withPath: "profile_images")
    
        let imageData = profileImageView.image?.jpegData(compressionQuality: 0.8)
        guard let data = imageData else { return }
    
        let metadata = StorageMetadata()
        metadata.contentType = "image/jpeg"
    
        // Here you can decide where to save the image. In your case it will look something like this.
        // let ref = Storage.storage().reference(withPath: "profile_images").child(user.uid)
        storageRef.putData(data, metadata: metadata) { (metadata, error) in
            if let _ = error {
                // Error Handling...
                return
            }
    
            storageRef.downloadURL { (url, error) in
                if let _ = error {
                    // Error Handling...
                    return
                }
    
                guard let url = url else { return }
                let urlString = url.absoluteString
                print(urlString)
            }
        }
    }
    

    希望这会有所帮助。

    因此,如果您想获取已保存在存储中的图像的 url。您首先需要它所在的引用。

    //Example as above
    let storageRef = Storage.storage().reference(withPath: "profile_images").child(user.uid)
    storageRef.downloadURL { (url, error) in
                if let _ = error {
                    // Error Handling...
                    return
                }
    
                guard let url = url else { return }
                let urlString = url.absoluteString
                print(urlString)
            }
    

    如果参考中没有图像,您将收到错误消息。它与我提供的第一个答案基本相同,但没有保存。由于图像已经存在,您可以只使用 ref.downloadURL。希望这会有所帮助。

    【讨论】:

    • 这行得通,谢谢。问题是我想通过我上传/保存它们的不同视图控制器来引用图像。我只需要一种方法来获取字符串,而无需在视图控制器之间传输数据。
    • 您想获取对已保存到存储中的图像的引用吗?
    • 是的,这正是我想要的。我应该更清楚。
    【解决方案2】:

    另外,为了从 Firebase 填充图像,我使用它,听起来这对你有用...

    func showProfilePicture() {
        if let uid = Auth.auth().currentUser?.uid {
                    let storage = Storage.storage()
                    let storageRef = 
     storage.reference(withPath: "\(uid)/photos/\(0)")
                    PhotoUploader.downloadImageUrl(from: 
     storageRef) {[weak self] (url) in
                        guard let url = url else { return }
    
      self?.displayProfileImage.downloaded(from: url, contentMode: .scaleAspectFill)
                    }
        } else {
            showAlert(withTitle: "Error", message: "Not signed in")
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2021-03-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-07
      • 1970-01-01
      • 2012-04-17
      相关资源
      最近更新 更多