![](/img/trans.png)
[英]Retrieving image from Firebase Storage placing in tableView not working,
[英]Error nil in retrieving image from Firebase Storage
我無法從Firebase存儲中檢索UIImage,子路徑似乎是正確的,盡管圖像沒有“下載”顯示。 關於Firebase數據庫的部分工作正常,因此檢索數據,而現在存儲數據。 代碼和Firebase路徑如下
我無法理解問題是否在於我將函數嵌套到數據庫檢索函數的.observeSingleEvent中。
GS://xxxyyy-xxxyyy.appspot.com/images/QhRmIcbF7AOWjZ3nrjFd7TOekrA3/FirstImage.jpg
var cells : [Cella] = []
var imageReference: StorageReference {
return Storage.storage().reference().child("images")
}
var databaseReference: DatabaseReference {
return Database.database().reference()
}
func getDataFromFirebase() -> [Cella]{
let queryRef = databaseReference.queryLimited(toLast: 1)
var appCells : [Cella] = []
queryRef.observeSingleEvent(of: .value, with: { (snapshot) in
for snap in snapshot.children {
var userPhoto : UIImage?
let userSnap = snap as! DataSnapshot
let customerUid = userSnap.key
let userDict = userSnap.value as! [String:AnyObject]
let description = userDict["description"] as! String
let title = userDict["title"] as! String
print(title)
print(String(customerUid))
print(description)
self.descriptionsArray[String(customerUid)] = description
self.titlesArray[String(customerUid)] = title
//error is here BECAUSE it can't retrive the image to be dispalyed. Title and description are fine
self.imageReference.child(String(customerUid)).child("FirstImage.jpg").getData(maxSize: 10*1024*1024, completion: { (data, error) in
if error != nil {
print("\(String(describing: error?.localizedDescription))")
}
else {userPhoto = UIImage(data: data!)}
})
let newCella = Cella(image: userPhoto!, title: title, bodyMessage: description)
appCells.append(newCella)
}
})
return appCells
}
------ UPDATE ------如我所知,我改為使用firebase Firestore並保存下載URL以及其他信息。 盡管如此,我似乎無法下載圖像。 下面的新代碼。
這是document.data()檢索的數據:xxx.yyy@gmail.com => [“userID”:QhRmIcbF7AOWjZ3nrjFd7TOekrA3,“userDescription”:Route66,“userImageUrl”: https ://firebasestorage.googleapis.com/v0/ b / shardana-61183.appspot.com / o / images%2FQhRmIcbF7AOWjZ3nrjFd7TOekrA3%2FFirstImage.jpg?alt = media&token = dea541bf-d598-414e-b4ed-a917541598d5 ,“userTitle”:Sample]
firestoreUsersDatabase.getDocuments { (querySnapshot, error) in
if let error = error {
print("Error getting the documents: \(error)")
} else {
for document in querySnapshot!.documents {
print("\(document.documentID) => \(document.data())")
let data = document.data()
let imageUrl = data["userImageUrl"] as! String
let title = data["userTitle"] as! String
let description = data["userDescription"] as! String
let urlDownloadReference = self.imageReference.reference(forURL: imageUrl)
urlDownloadReference.getData(maxSize: 10*2014*2014, completion: { (data, error) in
if error != nil {
print("An error occurred: \(String(describing: error?.localizedDescription))")
} else {
guard let imageDownloaded = UIImage(data: data!) else {print("Image url returned nil value ERROR"); return}
let newCell = Cella(image: imageDownloaded, title: title , bodyMessage: description )
print("NEW CELL: Image \(newCell.image)")
appCells.append(newCell)
}
})
}
}
}
是的,我認為你的邏輯需要審查。 您需要在Firestore上存儲所有用戶數據,包括對所需圖像的所有引用。 另一方面,Firebase存儲是Firebase中的一項不同服務,它將保存圖像並為您提供下載鏈接,但它使用的邏輯與Firestore不同。
請參閱以下示例以澄清我的意思:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.