【问题标题】:download image from firebase storage in swift快速从firebase存储下载图像
【发布时间】:2021-05-27 16:06:14
【问题描述】:

图像位置为 gs://olio-ae400.appspot.com/Listings/Food/-M3g8pZDGmApicUAQtOi/MainImage

我想从这个 firebase 存储位置下载到 imageview。 使用了下面的代码,但是无法从url下载图片?

 let storage = Storage.storage()
 var reference: StorageReference!
       
        reference = storage.reference(forURL: "gs://olio-ae400.appspot.com/Listings/Food/-M3g8pZDGmApicUAQtOi/MainImage")

 reference.downloadURL { (url, error) in
           print("image url is",url!)
            let data = NSData(contentsOf: url!)
            let image = UIImage(data: data! as Data)
            self.img.image = image

        }

在响应中检索 url 时在 downloadURL 行出现错误。

下载图片的正确方法是什么?

【问题讨论】:

  • 您可能应该在文件名中添加扩展名。存储不关心扩展名,因此您可以使用任何字符串作为文件名,但是当您以后想要访问该文件时,它会让您更清楚。因此,最初将文件存储为 -M3g8pZDGmApicUAQtOi/MainImage.jpg"),而不是 -M3g8pZDGmApicUAQtOi/MainImage")。此外,您没有正确下载文件。见Download to a local file。然后注意 .downloadUrl 获取现有文件的下载 URL
  • 已编辑问题并添加图片存放位置。可以看到文件格式为image/jpeg。
  • 非常好。现在,查看我在上述评论中链接的文档,该文档显示了从 Storage 下载图像的正确方法。您可以使用.getData(maxSize: 将其下载到内存中,也可以使用.write(toFile: 将其下载到磁盘。查看文档中的内容,让我们知道您卡在哪里(如果您这样做,请更新您问题中的代码)
  • 我会尝试代码并更新你
  • 我使用了firebaseUi,它成功了。代码如下:

标签: swift firebase download imageview firebase-storage


【解决方案1】:

指定路径及其扩展名,然后使用:

let path = "Listings/Food/-M3g8pZDGmApicUAQtOi/MainImage.jpg"
let reference = Storage.storage().reference(withPath: path) 

reference.getData(maxSize: (1 * 1024 * 1024)) { (data, error) in
        if let err = error {
           print(err)
      } else {
        if let image  = data {
             let myImage: UIImage! = UIImage(data: image)

             // Use Image
        }
     }
}

【讨论】:

  • 图片在 -M3g8pZDGmApicUAQtOi 文件夹内。给它加上扩展名 jpg 显示 404 错误。
  • 您可以发布您的存储规则吗? @saranya
  • rules_version = '2'; service firebase.storage { match /b/{bucket}/o { match /{allPaths=**} { 允许读,写:如果 request.auth != null; } } }
  • 这不是规则 - 文件名最初存储时没有 .jpg 扩展名。
  • 那怎么下载图片呢?
【解决方案2】:

安装 pod firebaseUI。

导入 FirebaseUI

从存储中获取引用并直接使用 SDwebimage 设置对 imageview 的引用,如下所示。

let ref2 = Storage.storage().reference(forURL: "gs://hungry-aaf15.appspot.com/Listings/Food/-MV04bNvewyGPHMYUkK9/MainImage") 

cell.img.sd_setImage(with: ref2)

【讨论】:

    猜你喜欢
    • 2019-03-11
    • 2018-03-15
    • 2016-12-28
    • 1970-01-01
    • 1970-01-01
    • 2017-11-17
    • 2017-01-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多