【问题标题】:Trying to return downloadUrl from Firebase storage using a function尝试使用函数从 Firebase 存储返回 downloadUrl
【发布时间】:2018-05-26 06:12:08
【问题描述】:

我正在尝试创建一个将图像上传到 Firebase 存储并返回其路径的下载 url 的函数,以便我可以在应用程序的其他部分使用它。

这是函数的样子:

func uploadImage(to reference:StorageReference, image:UIImage) -> URL? {

        let imageData = UIImageJPEGRepresentation(image, 0.2)
        let metadata = StorageMetadata()
        metadata.contentType = "image/jpeg"
        var downloadURL = metadata.downloadURL()
        reference.putData(imageData!, metadata: metadata) { (metadata, error) in
            if error != nil {
                print("Couldnt upload due to \(String(describing: error))")
            }
            downloadURL = metadata?.downloadURL()
        }
        return downloadURL!
    }

我似乎无法得到我想要的结果,因为 downloadUrl 总是返回 nil。我究竟做错了什么?

【问题讨论】:

    标签: swift firebase firebase-storage


    【解决方案1】:

    这里的问题是您的函数在上传完成之前返回。换句话说,您的函数需要返回一个回调,而不是一个普通的 URL。有点像 -

    func uploadImage(to reference:StorageReference, image:UIImage, completion: @escaping (URL?) -> Void) {
        let imageData = UIImageJPEGRepresentation(image, 0.2)
        let metadata = StorageMetadata()
        metadata.contentType = "image/jpeg"
        var downloadURL = metadata.downloadURL()
        reference.putData(imageData!, metadata: metadata) { (metadata, error) in
            if error != nil {
                print("Couldnt upload due to \(String(describing: error))")
                completion(nil)
            } else {
                 if let downloadUrl = metadata?.downloadURL() {
                    completion(downloadUrl)
                } else {
                    completion(nil)
                }
            }
        }
    }
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-22
    • 1970-01-01
    • 2016-11-26
    • 1970-01-01
    • 2016-11-02
    • 2020-01-09
    • 2018-09-20
    • 2018-11-18
    相关资源
    最近更新 更多