【问题标题】:storageReference.downloadURL with completion handler... url keeps returning nil带有完成处理程序的 storageReference.downloadURL... url 不断返回 nil
【发布时间】:2018-12-28 09:08:30
【问题描述】:

由于某种原因,当我使用 firebase 存储检索我的下载图像 URL(我已确认图像实际上已发送到 firebase 存储)时,该 url 返回 nil。我很确定我的文件路径匹配/正确,但我不确定我哪里出错了。

let selectedImageData=UIImageJPEGRepresentation(selectedImage.image!, 1)
    let storageRef=Storage.storage().reference()
    let metadata=StorageMetadata()
    storageRef.child("Users").child(Auth.auth().currentUser!.uid)
        .child("Pictures"+String(self.tracker)).putData(selectedImageData!, metadata: metadata) 
    { 
        (metadata, error) in

        if error != nil{
            print("There was a problem uploading")
            return
        }

        storageRef.child("Users").child(Auth.auth().currentUser!.uid)
            .child("Pictures"+String(self.tracker)).downloadURL(completion: 
        { 
            (url, error) in

            print("What's going on")
            self.pictures.append((url?.absoluteString)!)
        })
    }

【问题讨论】:

  • 在 downloadUrl 完成处理程序中,您还会收到错误消息?你能打印出来吗?也许它说明了失败的原因
  • 在调试控制台上,它说 url 等于 nil - 这就是我说完成处理程序有错误的原因。除此之外,它什么也没说。
  • 在您的print("What's going on") 行下方添加此行并让我知道您的调试控制台中打印的内容:print("Download url error: \(error)")
  • 下载 url 错误:可选(错误域=FIRStorageErrorDomain Code=-13010 “对象用户/0kOuKzm2ukbLtlddYBXXcxVxfeq1/Pictures5 不存在。” UserInfo={object=Users/0kOuKzm2ukbLtlddYBXXcxVxfeq1/Pictures5, bucket=wemic-f .appspot.com, ResponseBody={ "error": { "code": 404, "message": "Not Found. could not get object" }

标签: ios swift firebase firebase-storage


【解决方案1】:

使用以下代码将图片上传到Storage并获取图片的返回路径

let selectedImageData=UIImageJPEGRepresentation(selectedImage.image!, 1)
self.uploadProfileImageToFirebase(data: selectedImageData)

func uploadProfileImageToFirebase(data:NSData){

let storageRef = Storage.storage().reference().child("Users").child(Auth.auth().currentUser!.uid).child("Pictures").child(String(self.tracker)) 
//Modify the above line as per your requirement

if data != nil {
    storageRef.putData(data as Data, metadata: nil, completion: { (metadata, error) in
        if(error != nil){
            print(error)
            return
        }

        // Fetch the download URL
        storageRef.downloadURL { url, error in
            if let error = error {
                // Handle any errors
                if(error != nil){
                    print(error)
                    return
                }
            } else {
                // Get the download URL
                let urlStr:String = (url?.absoluteString) ?? ""
                print(urlStr)
            }
        }
    })
}

【讨论】:

  • 我遇到了类似的问题,这对我有用。参考文献中出现了故障。绝对字符串需要引用图像“文件”,而不是“文件夹”
【解决方案2】:

您对 putData 和获取 downloadURL 的参考似乎有所不同,也许跟踪器在此期间正在改变?

为避免引用不同,让我们尝试像这样更改您的代码:

let selectedImageData=UIImageJPEGRepresentation(selectedImage.image!, 1)
let storageRef=Storage.storage().reference()
let metadata=StorageMetadata()
let reference = storageRef.child("Users").child(Auth.auth().currentUser!.uid).child("Pictures"+String(self.tracker))
reference.putData(selectedImageData!, metadata: metadata) { (metadata, error) in
    if error != nil{
        print("There was a problem uploading")
        return
    }
    reference.downloadURL { (url, error) in
        print("Download error: \(error), url: \(url)")
        self.pictures.append((url?.absoluteString)!)
    }
}

基本上,我们确保在两种情况下都使用相同的引用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-12
    • 1970-01-01
    • 1970-01-01
    • 2016-06-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多