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



我目前有一个视图控制器,用户可以在其中上传图像,该图像存储在Firebase Storage中,其中包含用户id的文件夹以及上传的图像。我想获取该图像的url并将其显示在视图控制器上。我的问题是,我需要将上传的图像的下载url存储到实时数据库中吗;用户->用户Id->媒体->图像标题->下载URL?或者,我有没有办法将图像视图引用到Firebase存储中,并相应地引用到包含所有图像的User 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,如下载数据的文档中所示
  2. 通过引用的下载URL,该URL提供公共只读访问

要调用getDatawrite或获取下载URL,您需要有一个对文件的引用,如创建引用中所示。

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

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

因此:它可以在不将下载URL存储在数据库中的情况下工作,但如果存储下载URL,也很好(而且很常见(。选择真的取决于你。

最新更新