尝试将图像添加到Firebase存储,然后将图像位置添加到Firestore文档中

问题描述 投票:0回答:1

我正在尝试将图像添加到Firebase存储中,然后获取该图像的位置,并将其与其他用户配置文件数据一起存储在Firestore文档中。我试图在用户首次创建帐户时执行所有这些操作。我试图使用图像URL来执行此操作,但这似乎不起作用。当我运行下面的代码时,它将注册一个新用户并将照片添加到Firebase存储中,但在Firestore数据库中未创建任何文档。我在做什么错?

@objc func handleSignUp() {

    //Signup properties
    guard let email = emailTextField.text else { return }
    guard let password = passwordTextField.text else { return }
    guard let fullName = fullNameTextField.text else { return }
    guard let username = usernameTextField.text?.lowercased() else { return }

    Auth.auth().createUser(withEmail: email, password: password) { (authResult, error) in

        //Handle error
        if let error = error {
            print("DEBUG: Failed to create user with error: ", error.localizedDescription)
            return
        }

        guard let profileImg = self.plusPhotoBtn.imageView?.image else { return }
        guard let uploadData = profileImg.jpegData(compressionQuality: 0.3) else { return }

        let filename = NSUUID().uuidString

        //Storage location for photo in Firebase
        let storageRef = Storage.storage().reference().child("profile_images").child(filename)

        storageRef.putData(uploadData, metadata: nil, completion: { (metadata, error) in

            //Handle error
            if let error = error {
                print("Failed to upload image to Firebase Storage with error", error.localizedDescription)
                return
            }
        })

        guard let username = self.usernameTextField.text?.lowercased() else { return }
        storageRef.downloadURL { (url, _) in

            guard let downloadURL = url else {
                print("DEBUG: Profile image url is nil")
                return
            }

            Firestore.firestore().collection("profile_data").addDocument(data: [
                "name": fullName,
                "username": username,
                "profileImageUrl": downloadURL,
                "email" : email]) { (err) in
                    if let err = err {
                        debugPrint("Error adding document: \(err)")
                    } else {
                        self.navigationController?.popViewController(animated: true)
                    }
            }

        }
    }
}
ios swift firebase google-cloud-firestore
1个回答
0
投票

我认为您应该在“ putData”中添加“ downloadURL”部分。

完成放置数据过程后,您应尝试获取URL,否则它将失败。

尝试一下,看看是否有效:

@objc func handleSignUp() {

    //Signup properties
    guard let email = email.text else { return }
    guard let password = password.text else { return }
    guard let fullName = name.text else { return }
    guard let username = name.text?.lowercased() else { return }

    createUser(email: email,
               password: password,
               fullName: fullName,
               userName: username)
}

func createUser(email: String, password: String, fullName: String, userName: String) {
    Auth.auth().createUser(withEmail: email, password: password) { (authResult, error) in

        //Handle error
        if let error = error {
            print("DEBUG: Failed to create user with error: ", error.localizedDescription)
            return
        }

        guard let profileImg = self.plusPhotoBtn.imageView?.image else { return }
        guard let uploadData = profileImg.jpegData(compressionQuality: 0.3) else { return }

        let filename = NSUUID().uuidString

        //Storage location for photo in Firebase
        let storageRef = Storage.storage().reference().child("profile_images").child(filename)

        storageRef.putData(uploadData, metadata: nil, completion: { (metadata, error) in

            //Handle error
            if let error = error {
                print("Failed to upload image to Firebase Storage with error", error.localizedDescription)
                return
            }

            guard let metadata = metadata else { return }

            guard let username = self.usernameTextField.text?.lowercased() else { return }
            storageRef.downloadURL { (url, _) in

                guard let downloadURL = url else {
                    print("DEBUG: Profile image url is nil")
                    return
                }

                let data = ["name": fullName,
                            "username": username,
                            "profileImageUrl": downloadURL,
                            "email" : email]

                self.addDocument(userData: data)
            }
        })
    }
}

func addDocument(userData: [String: Any]) {
    Firestore.firestore().collection("profile_data").addDocument(data: userData) { (err) in
            if let err = err {
                debugPrint("Error adding document: \(err)")
            } else {
                self.navigationController?.popViewController(animated: true)
            }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.