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

Fetching Download URL From Uploaded Image - Firebase and 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
                    }
                    
                }
                
            })
            
            } 

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

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

要调用 getDatawrite 或下载 URL,您需要参考 creating a reference.[=16 中所示的文件=]

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

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

因此:它可以在不将下载 URL 存储在数据库中的情况下工作,但是如果您 执行 存储下载 [=35] 也很好(并且很常见) =].选择完全取决于您。