簡體   English   中英

顯示從 Firebase 生成的 downloadURL 下載的圖像

[英]Display Image downloaded from downloadURL generated by Firebase

我需要顯示存儲在 Firebase 上的圖像。 現在,我只使用 function downloadURL生成的鏈接跟蹤圖像:

    func UploadImage(imageData: Data, path: String, completion: @escaping (String) -> ()){
        
        let storage = Storage.storage().reference()
        let uid = Auth.auth().currentUser?.uid
        
        storage.child(path).child(uid ?? "").putData(imageData, metadata: nil) { (_, err) in
            
            if err != nil{
                completion("")
                return
                
            }
            // Downloading Url And Sending Back...
            storage.child(path).child(uid ?? "").downloadURL { (url, err) in
                if err != nil{
                    completion("")
                    return
                    
                }
                completion("\(url!)")
            }
        }
    }

所以我能得到的只是一個像這樣的超鏈接: https://firebasestorage.googleapis.com/v0/b/getting-started-20f2f.appspot.com/o/profile_Photos%2FGQ1KR9H1mLZl2NAw9KQcRe7d72N2?alt=media&token=473ce86c-52ba-42ec-be71-32cc7dc895d7 我參考了官方文檔,好像只有有了鏡像文件的名字才能下載到ImageView或者UIImageView object。 但是,該鏈接對我沒有任何意義,那我該怎么辦?

編輯

我實際上嘗試了官方文檔提供的解決方案:

func imageDownloader(_ imageURL: String) {
        let store = Database.database().reference()
        let uid = Auth.auth().currentUser?.uid
        let imageRef = store.child(imageURL)
        var myImageView = UIImageView()

        imageRef.getData(completion: { (error, data) in
            if let error = error {
              // Uh-oh, an error occurred!
            } else {
              // Data for "images/island.jpg" is returned
              let image = UIImage(data: data!)
            }
          })
    }

但這表明我需要更改某些內容,因為Cannot convert value of type 'DataSnapshot' to expected argument type 'Data'

如果您將圖像路徑存儲在 Firestore 中,則實際上如果 fork 下只有一個文件可用,則確切的文件名並不重要。 所以你只需要指定路徑。

然后從存儲中下載圖像,構建路徑並下載:

let uid = Auth.auth().currentUser?.uid

Storage.storage().reference().child("the\path\to\your\uid\collection").child(uid).getData(maxSize: 1048576, completion: { (data, error) in
    if let data = data,
       let img = UIImage(data: data) {
        // do something with your image
    } else {
        if let error = error {
            print(error)
        }
        // handle errors
    }
})

將您的圖像存儲在 Firebase 存儲中,然后使用此代碼檢索。

Storage.storage().reference.child("ProfilePhotos").child("ImageName").downloadURL {(url, _) in
            DispatchQueue.main.async {
                guard let url = url else { return }
                imageView.setImage(with: url, placeholder: UIImage(named: "dummyImage"))
            }
        }

您正在上傳到Storage.storage() ,但隨后在imageDownloader中,您嘗試使用Database.database() ,它具有類似的 API,但實際上不同。

確保使用Storage.storage()並且閉包參數在訂單data, error in .

最后,現在在您的imageDownloader中,看起來您還沒有使用var myImageView = UIImageView()做任何事情,但請記住,在異步getData完成之前,您將無法訪問UIImage

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM