swift - 使用 Firebase 存储上传图片
问题描述
我只能将一张照片上传到 FirebaseStorage。
我在 youtube 上看到的所有教程都使用 FirebaseStorage 来保存用户的个人资料图片。但是,我正在尝试制作一个餐厅应用程序,我应该能够保留几张照片,而不仅仅是一张。我的代码现在只允许我保留一个。一旦我尝试上传第二张图片,它就会删除第一张。
这是我的代码:
@IBAction func agregarComidaFav(_ sender: Any) {
guard let imageData = imagen?.jpegData(compressionQuality: 0.4) else {
return
}
let storageRef = Storage.storage().reference(forURL: "gs://comidas-68043.appspot.com")
let storageProfileRef = storageRef.child("ComidasFavoritas")
let metadata = StorageMetadata()
metadata.contentType = "image/png"
storageRef.child("comidasFavoritas/png").putData(imageData, metadata: metadata) { (storageMetaData, error) in
if error != nil {
print(error?.localizedDescription ?? "")
return
}
}
storageProfileRef.downloadURL(completion: { (url, error) in
if let metaImageUrl = url?.absoluteString {
print(metaImageUrl)
self.imagenURL = metaImageUrl
}
})
var ref: DocumentReference? = nil
ref = db.collection("comidasFavoritas").addDocument(data: [
"imagenURL" : imagenURL
]) { err in
if let err = err {
print("Error agregando comida: \(err)")
} else {
let id = ref!.documentID
print("Comida agregado con ID: \(id)")
}
}
}
解决方案
这一行:
storageRef.child("comidasFavoritas/png").putData(...)
...保证每次都将数据写入"comidasFavoritas/png"
我不知道您如何跟踪应用程序中的数据/图像,但您可能需要一些方法来跟踪该图像的 ID。然后,当你存储它时,你可以像这样存储它:
storageRef.child("comidasFavoritas/png\(imageId)").putData(...)
当您存储图像 URL 时,您可能还希望将该 ID 存储在您的数据库中。
推荐阅读
- python - 为什么我的打印在返回后不能在函数中工作?
- python - Gitlab CI 中的覆盖率徽章,Python 覆盖率始终未知
- xcode10.2 - Xcode 10.2 如何仅为 Xcode 而不是整个 macOS 启用暗模式?
- python-3.x - Python3 - EmailMessage - excel 文件附件变成 ATT00001.xlsx
- c# - 是否有必要用 Task.Run 包装将在非 GUI 线程中的延续?
- amazon-web-services - 使用 nginx 代理为 googlebot 等机器人提供静态 S3 到不同的存储桶
- javascript - 通过点击 iframe 中的按钮发送 Google Analytics 事件
- sql - 如果许多答案与查询匹配,则返回备用值的 SQL 方式
- ios - 检查 Admob 插页式是否完成
- python - 为什么这个 .replace 代码不起作用,它可能与 def 函数有关