首页 > 解决方案 > 使用 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)")
            }
        }
        
        
    }

标签: swift

解决方案


这一行:

storageRef.child("comidasFavoritas/png").putData(...)

...保证每次都将数据写入"comidasFavoritas/png"

我不知道您如何跟踪应用程序中的数据/图像,但您可能需要一些方法来跟踪该图像的 ID。然后,当你存储它时,你可以像这样存储它:

storageRef.child("comidasFavoritas/png\(imageId)").putData(...)

当您存储图像 URL 时,您可能还希望将该 ID 存储在您的数据库中。


推荐阅读