【发布时间】:2016-12-07 02:45:17
【问题描述】:
我按照 github 上的 sample project 将一些照片上传到 Firebase Storage。
在使用 Firebase 存储之前,我将照片保存到其他网站。当我从之前在其他网站上保存的那些图像 URL 下载照片时,没有任何问题并且内存使用是合理的。但是,当我将图像的 URL 链接粘贴到 Firebase 数据库上的相应子项,然后从这些 URL 下载时,我似乎遇到了严重的内存问题。对于每 ~200kb 图像,内存使用量增加 ~10mb。由于我从其他 URL 下载图像没有这个问题,我相信这是一个特定于 firebase 的问题。有没有人遇到同样的内存问题?有什么建议/帮助吗?
注意:我将图像的 URL 保存到了 firebase 实时数据库。我从那里下载 URL 链接并将它们提供给我的照片集视图单元格。这是我为照片集视图单元格编写的代码:
class PhotosCollectionViewCell: UICollectionViewCell {
@IBOutlet weak var imageView: UIImageView!
private var downloadTask: FIRStorageDownloadTask!
var imageURL: String! {
didSet {
downloadTask = FIRStorage.storage().referenceForURL(imageURL).dataWithMaxSize(1*1024*1024) { (imageData, error) in
guard error == nil else { print(error); return }
if let imageData = imageData {
self.imageView.image = UIImage(data: imageData)
}
// imageView.kf_showIndicatorWhenLoading = true
// imageView.kf_setImageWithURL(NSURL(string: imageURL)!)
}
}
}
override func prepareForReuse() {
super.prepareForReuse()
imageView.image = nil
// imageView.kf_cancelDownloadTask()
downloadTask.cancel()
}
}
我唯一要解决的问题是,我希望能够从我还保存在实时数据库中的 URL 下载我保存到 Firebase 存储的图像。一个重要的事实是,kingfisher 从 URL 下载图像时没有任何内存问题。当这些图像 URL 来自 firebase 存储时,就会出现问题。
注意:从 Firebase 存储功能下载这些图像时,我也会遇到内存问题。我在某种程度上知道内存使用量增加是正常的,但我在 Firebase 存储中的图像只有大约 200KB。
【问题讨论】:
-
您能否发布一些有关如何下载这些 URL 的代码?您只是在使用示例项目并注意到它吗?
-
感谢您回答弗兰克。不,我不想将照片存储在本地磁盘上,所以我使用(并且一直在使用没有任何内存问题)流行的第三方 library 来下载图像。
-
可能是因为iOS在解压jpeg图片方面不如png格式好?是否可以将 png 格式的图像保存到 Firebase 存储?我尝试更改元数据,例如 `metadata.contentType = "image/png"`,但是当我使用此元数据上传后下载时,我看到图像格式仍然是 JPEG。
-
如果您没有使用 Firebase Storage 的内置下载功能,您只是将下载 URL 传递给某个第三方库,听起来这不是 Firebase Storage 的问题--听起来第三方库下载有问题。
-
另外,在不改变文件实际编码的情况下改变内容类型没有任何作用——你需要使用
UIImageJPEGRepresentation和UIImagePNGRepresentation。
标签: ios firebase firebase-storage