[英]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.