Swift4:从Firebase下载照片

时间:2018-03-20 14:02:30

标签: ios swift firebase swift4

我想下载之前从Firebase上传的照片。我使用以下代码:

    fbUser = Auth.auth().currentUser
    let storage = Storage.storage()
    let storageRef = storage.reference(forURL: "somepath.some")
    let profilePicRef = storageRef.child(fbUser.uid+"_profile_pic.jpg")

    var imageFB : UIImage? = nil

    profilePicRef.downloadURL(completion: { (url, error) in

        if error != nil {
            print(error!)
            return
        }

        URLSession.shared.dataTask(with: url!, completionHandler: { (data, response, error) in

            if error != nil {
                print(error!)
                return
            }

            guard let imageData = UIImage(data: data!) else { return }

            DispatchQueue.main.async {
                imageFB = imageData
            }

        }).resume()

    })

照片就在那里 - 如果我删除了照片,那么我会收到错误信息,指出文件丢失了。但是,下载后,即使照片在那里,imageFB总是等于nil。

有关如何解决该问题的任何建议吗?

2 个答案:

答案 0 :(得分:0)

Firebase包含FirebaseUI,可帮助管理图像下载/缓存。在文档之后,您应该能够通过几行简单的代码下载和显示图像。

我建议你看看documentation。该链接将带您进入图像下载部分,并提供有关如何安装和使用它的示例。

答案 1 :(得分:0)

试试这个让我们知道是否有效。

 fbUser = Auth.auth().currentUser
 let storage = Storage.storage()
 let storageRef = storage.reference(forURL: "somepath.some")
 let profilePicRef = storageRef.child(fbUser.uid+"_profile_pic.jpg")

// give your db ref var here
 let ref = Database.database().reference()
 let usersRef = ref.child("users").child(uid!)

 var picArray: [UIImage]()

下载:

usersRef.observeEventType(.ChildAdded, withBlock: { (snapshot) in

  // Get download URL from snapshot
  let downloadURL = snapshot.value() as! String

  profilePicRef.downloadURL(completion: { (url, error) in
            let data = Data(contentsOf: url!)
            let image = UIImage(data: data! as Data)
            picArray.append(image)
  })
})