首页 > 解决方案 > 使用 Swift 在 Firestore 中发送表单数据

问题描述

我在我的应用程序中使用 Firestore,我有一个表单,其中有一个图像、名称和包含名称和图像的数组。现在我希望它发送到 Firestore DB。我正在尝试这样,

func saveTeamAPI()
{
    let image = teamImage.image
    let data = image!.jpegData(compressionQuality: 1.0)

    // set upload path
    let db = Firestore.firestore()
    var ref: DocumentReference? = nil
    ref = db.collection("Team").addDocument(data: [
        "teamName": teamNameTxt.text!,
        "teamImage": data!,
        "players": playerArray
    ]) { err in
        if let err = err {
            print("Error adding document: \(err)")
        } else {
            print("Document added with ID: \(ref!.documentID)")
        }
    }
}

我对如何在 Firestore 中发送图像以及一系列名称和图像感到困惑?

我该如何解决这个问题?

标签: swiftfirebasegoogle-cloud-firestore

解决方案


我建议您使用 Firebase Storage,因为它是一种存储图像的有效方式。以下是您的操作方法: 1) 循环遍历一组图像并将它们一张一张上传到存储中。2) 每次成功上传后,获取图片 url 并将其附加到名为 imagesURLs 的数组中。

let storage = Storage.storage()
let storageRef = storage.reference()

var imagesURLs = [String]()

for image in images.enumerated() {

let newImageRef = storageRef.child(/\(image.0)avatar.jpg")

let data = image.jpegData(compressionQuality: 0.0)

_ = newImageRef.putData(data!, metadata: nil) { (metadata, error) in

            guard metadata != nil else {
                print(error as Any)
                return
            }

            newImageRef.downloadURL(completion: { (url, error) in
                guard url != nil else {
                    return
                }

                print("Avatar uploaded: \(url!.absoluteString)")

                imagesURLs.append(url!.absoluteString)
            })
        }
}

获取所有 url 后,您可以使用 Firestore 将它们作为“imageURLs”发送:imageURLs


推荐阅读