无法从 Firebase 将图像下载到数组中

Posted

技术标签:

【中文标题】无法从 Firebase 将图像下载到数组中【英文标题】:Trouble downloading images into array from Firebase 【发布时间】:2017-03-28 20:32:46 【问题描述】:

这是我遇到问题的代码。

共享:

// Firebase services
var database: FIRDatabase!
var storage: FIRStorage!
...
// Initialize Database, Auth, Storage
database = FIRDatabase.database()
storage = FIRStorage.storage()
...
// Initialize an array for your pictures
var picArray: [UIImage]()

上传:

let fileData = NSData() // get data...
let storageRef = storage.reference().child("myFiles/myFile")
storageRef.putData(fileData).observeStatus(.Success)  (snapshot) in
// When the image has successfully uploaded, we get it's download URL
let downloadURL = snapshot.metadata?.downloadURL()?.absoluteString
// Write the download URL to the Realtime Database
let dbRef = database.reference().child("myFiles/myFile")
dbRef.setValue(downloadURL)

下载:

let dbRef = database.reference().child("myFiles")
dbRef.observeEventType(.ChildAdded, withBlock:  (snapshot) in
// Get download URL from snapshot
let downloadURL = snapshot.value() as! String
// Create a storage reference from the URL
let storageRef = storage.referenceFromURL(downloadURL)
// Download the data, assuming a max size of 1MB (you can change this as necessary)
storageRef.dataWithMaxSize(1 * 1024 * 1024)  (data, error) -> Void in
// Create a UIImage, add it to the array
let pic = UIImage(data: data)
picArray.append(pic)
 )
)

我一直在尝试使用最初由 @Mike-McDonald 几个月前发布的上述代码,从我的 Firebase 数据库中提取和附加一组图像。我可以使用上述方法成功上传图片,但对于我来说,我无法下载图片,也无法附加到图片数组。

我没有收到任何错误 - 只是“下载”代码似乎没有运行(我也尝试在控制台中验证这一点)。 Swift 3 有几行不同,但我唯一不确定的是:

let storageRef = storage.referenceFromURL(downloadURL) 

现在

let storageRef = self.storage.reference(forURL: downloadURL)

对此或如何使用带有 Firebase 的 childadded 观察者创建/附加图像数组的任何建议将不胜感激。谢谢!

【问题讨论】:

【参考方案1】:

除了你必须更新到data(withMaxSize:completion)observe(_:with:) 并像你已经提到的那样使用reference(forURL:) 之外,我觉得很好。因此,您需要将代码更新为:

let dbRef = database.reference().child("myFiles")
dbRef.observe(.childAdded, with:  (snaphot) in
  // Get download URL from snapshot
  let downloadURL = snapshot.value() as! String
  // Create a storage reference from the URL
  let storageRef = storage.reference(forURL: downloadURL)
  // Download the data, assuming a max size of 1MB (you can change this as necessary)
  storageRef.data(withMaxSize: 1 * 1024 * 1024)  (data, error) in
    let pic = UIImage(data: data!)
    picArray.append(pic)
  
)

【讨论】:

谢谢。我已经进行了这些更改。仍然无法让下载代码完全执行。 我明白了,下载绝对适用于这段代码。因此,您将提到的代码用作您自己使用的基本代码。也许您应该添加更多自己的代码部分,并更详细地解释您尝试实现的目标。似乎问题出在其他地方【参考方案2】:

在我的案例中,我找到了答案。我没有将图像作为数据上传。因此,作为数据的下载从未发生过。它不会触发错误,只是不会执行。这是我所做的更改:

let fileData = NSData() 

改为:

let fileData = (UIImagePNGRepresentation(self.imagefile.image!)! as NSData?)!

现在完美运行!

【讨论】:

以上是关于无法从 Firebase 将图像下载到数组中的主要内容,如果未能解决你的问题,请参考以下文章

将多个图像存储到 Firebase 并获取 url

将图像从图库上传到 Firebase 存储时应用程序崩溃

将图像从 Firebase 下载到 Flutter

将 Firebase 图像显示到数组中

如何从 Firebase 检索数据到 ListView(使用自定义数组适配器)

无法从 python 服务器将图像上传到 Firebase 存储