ios - 从 Firebase 将图像下载到数组时遇到问题

标签 ios swift firebase firebase-realtime-database firebase-storage

这是我遇到问题的代码。

共享:

// 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 观察者创建/附加图像数组的建议,我们将不胜感激。谢谢!

最佳答案

对我来说看起来很好,除了你必须更新到 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)
  }
})

关于ios - 从 Firebase 将图像下载到数组时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43079399/

相关文章:

javascript - 从 Firebase JavaScript 检索数据

reactjs - 使用 React-beautiful-dnd 和 Cloud Firestore 发生 Flash

javascript - 如何在iOS自动化脚本中搜索字符串中的子字符串? indexOf() 和 search() 方法不起作用

ios - Tableview 记录从 View 中消失

swift - 如何在 SwiftUI 中的列表下方添加按钮?

ios - Swift:检测与 iOS 7 兼容的滑动手势

Firebase动态链接-根网址

ios - ABPeoplePickerNavigationController 和 UIImagePickerController 在 iPad iOS7 上无法正确显示

ios - 单击不调用 UITableView didSelectRowatIndexPath

XCode 6 通用 : Constantly freezing/locking while editing Swift code