如何解决从上传的图像中获取下载 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 中读取数据:
- 通过 Firebase SDK 通过对引用调用
getData
或write
,如 downloading data 上的文档中所示。 - 通过提供公开只读访问权限的参考下载 URL。
要调用 getData
、write
或获取下载 URL,您需要引用文件,如 creating a reference 所示。
由于您将文件存储在用户的 UID 下,如果您知道用户的 UID,您始终可以为用户创建对 any 的引用。因此,您始终可以执行上述两种方法之一来读取文件的数据,即使您没有存储下载 URL。
也就是说,将下载 URL 存储在数据库中是很常见的,因为这意味着您可以像对待任何其他图像 URL 一样对待它。通过这样做,您的其余代码将不必了解有关 Cloud Storage 的任何信息。
所以:它可以在不将下载 URL 存储在数据库中的情况下工作,但如果您确实存储下载 URL,它也很好(并且很常见)。选择权完全取决于您。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。