正在从上传的图像中获取下载 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
}
}
})
}
有两种方法可以从存储中读取数据:
- 通过 Firebase SDK 通过对参考调用
getData
或 write
,如 downloading data 上的文档中所示。
- 通过下载URL供参考,提供public只读权限。
要调用 getData
、write
或下载 URL,您需要参考 creating a reference.[=16 中所示的文件=]
由于您将文件存储在用户的 UID 下,如果您知道用户的 UID,则始终可以为该用户创建对 any 的引用。因此,您始终可以执行上述两种方法之一来读取文件数据,即使您没有存储下载 URL.
也就是说,将下载 URL 存储在数据库中是相当常见的,因为这意味着您可以像对待任何其他图像一样对待它 URL。通过这样做,您的其余代码将不必了解有关云存储的任何信息。
因此:它可以在不将下载 URL 存储在数据库中的情况下工作,但是如果您 执行 存储下载 [=35] 也很好(并且很常见) =].选择完全取决于您。
我目前有一个视图控制器,用户可以在其中上传图像,该图像存储在 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
}
}
})
}
有两种方法可以从存储中读取数据:
- 通过 Firebase SDK 通过对参考调用
getData
或write
,如 downloading data 上的文档中所示。 - 通过下载URL供参考,提供public只读权限。
要调用 getData
、write
或下载 URL,您需要参考 creating a reference.[=16 中所示的文件=]
由于您将文件存储在用户的 UID 下,如果您知道用户的 UID,则始终可以为该用户创建对 any 的引用。因此,您始终可以执行上述两种方法之一来读取文件数据,即使您没有存储下载 URL.
也就是说,将下载 URL 存储在数据库中是相当常见的,因为这意味着您可以像对待任何其他图像一样对待它 URL。通过这样做,您的其余代码将不必了解有关云存储的任何信息。
因此:它可以在不将下载 URL 存储在数据库中的情况下工作,但是如果您 执行 存储下载 [=35] 也很好(并且很常见) =].选择完全取决于您。