从上传的图像中获取下载 URL - Firebase 和 Swift

问题描述

我目前有一个视图控制器,用户在其中上传图像,该图像存储在 Firebase 存储中,其中包含用户 ID 和上传图像的文件夹。我想获取该图像的 url 并将其显示在视图控制器上。我的问题是,我是否需要将上传图像的下载 url 存储到实时数据库中,即;用户 -> 用户 ID -> 媒体 -> 图片标题 -> 下载 URL?或者有没有办法让我将图像视图引用到 Firebase 存储并相应地导入包含所有图像的用户 ID 文件夹并显示它?如果有人可以帮助我,我将不胜感激。谢谢!

这是我的代码

       let imageName = (Auth.auth().currentUser?.uid)!+"/\(imageTitle.text!)"
        let imageReference = Storage.storage().reference().child(MyKeys.imagesFolder).child(imageName)
        
        imageReference.putData(data,Metadata: nil) { (Metadata,err) in
            
            if let err = err {
                print ("Error")
                return
            }
            
            
            imageReference.downloadURL(completion: { (url,err) in
                    
                if let err = err {
                    print ("Error")
                    return
                }
                
                guard let url = url else {
                    print ("Error")
                    return
                }
                
                let dataReference = Firestore.firestore().collection(MyKeys.imagesCollection).document()
                
                let documentUid = dataReference.documentID
                                                
                let urlString = url.absoluteString
                
                let data = [
                    MyKeys.uid:documentUid,MyKeys.imageUrl: urlString,MyKeys.imageTitle: self.imageTitle.text!,] as [String : Any]
                
                dataReference.setData(data) { (err) in
                    if let err = err {
                        print ("Error")
                        return
                    }
                    
                }
                
            })
            
            } 

解决方法

有两种方法可以从 Storage 中读取数据:

  1. 通过 Firebase SDK 通过对引用调用 getDatawrite,如 downloading data 上的文档中所示。
  2. 通过提供公开只读访问权限的参考下载 URL。

要调用 getDatawrite 或获取下载 URL,您需要引用文件,如 creating a reference 所示。

由于您将文件存储在用户的 UID 下,如果您知道用户的 UID,您始终可以为用户创建对 any 的引用。因此,您始终可以执行上述两种方法之一来读取文件的数据,即使您没有存储下载 URL。

也就是说,将下载 URL 存储在数据库中是很常见的,因为这意味着您可以像对待任何其他图像 URL 一样对待它。通过这样做,您的其余代码将不必了解有关 Cloud Storage 的任何信息。

所以:它可以在不将下载 URL 存储在数据库中的情况下工作,但如果您确实存储下载 URL,它也很好(并且很常见)。选择权完全取决于您。