【问题标题】:I want to get the download url of image from firebase storage ios swift我想从firebase storage ios swift获取图像的下载url
【发布时间】:2018-02-19 11:54:30
【问题描述】:

我正在使用firebase上传一些图片,它的工作正常,但问题是我无法获取图片的下载网址

这是我的代码

@IBAction func btnUploadImgsAction(_ sender: UIButton) {


    let url1 = uploading(img: Img1)
    print("///////////img 1   //////// \(url1)   ////////")
    let url2 = uploading(img: Img2)
    print("///////////img 2   //////// \(url2)   ////////")
    let url3 = uploading(img: Img3)
    print("///////////img 3   //////// \(url3)   ////////")
    let url4 = uploading(img: Img4)
    print("///////////img 4   //////// \(url4)   ////////")


}


func uploading( img : UIImageView)-> String{
    var strURL = ""
    let imageName = NSUUID().uuidString
    let storeImage = self.storageRef.child("profile_Images").child(imageName)

    if let uploadImageData = UIImagePNGRepresentation((img.image)!){
        storeImage.putData(uploadImageData, metadata: nil, completion: { (metaData, error) in
            storeImage.downloadURL(completion: { (url, error) in
                if let urlText = url?.absoluteString {

                     strURL = urlText
                    print("///////////tttttttt//////// \(strURL)   ////////")


                }
            })
        })


    }

    return strURL
}

当我在上传方法中打印 strURL 时,url 来了,但是当我在 btnUploadImgsAction 中打印时,它没有来,donig 出了什么问题? 请帮忙提前谢谢

【问题讨论】:

标签: ios swift image firebase firebase-storage


【解决方案1】:

你应该创建一个闭包方法而不是直接返回字符串的方法,因为这个方法是异步方法

您的方法声明应如下所示

func uploading( img : UIImageView, success: (url: String) -> Void) {
 // return with clouser
 success(url: strurl)
}

用你的方法更新

func uploading( img : UIImageView, completion: @escaping ((String) -> Void)) {
    var strURL = ""
    let imageName = NSUUID().uuidString
    let storeImage = self.storageRef.child("profile_Images").child(imageName)

    if let uploadImageData = UIImagePNGRepresentation((img.image)!){
        storeImage.putData(uploadImageData, metadata: nil, completion: { (metaData, error) in
            storeImage.downloadURL(completion: { (url, error) in
                if let urlText = url?.absoluteString {

                    strURL = urlText
                    print("///////////tttttttt//////// \(strURL)   ////////")

                    completion(strURL)
                }
            })
        })
    }
}

函数调用会是

let str = uploading(img: imageObject) { (url) in
     print(url)
 }

【讨论】:

  • @Rooh 如果我的回答对您有帮助,请将其标记为正确答案
猜你喜欢
  • 2021-07-17
  • 2021-02-13
  • 2021-03-22
  • 1970-01-01
  • 2018-02-04
  • 1970-01-01
  • 2023-03-26
  • 1970-01-01
  • 2021-09-10
相关资源
最近更新 更多