首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Firebase change photoURL

Firebase change photoURL
EN

Stack Overflow用户
提问于 2018-01-10 16:56:14
回答 1查看 1.8K关注 0票数 0

当用户点击他们的头像时,他们有一个选择新照片的选项。我想将照片存储到我的存储和数据库中,并在imagePickerController关闭时立即更新视图屏幕上显示新图像,但是数据库中没有任何更改,并且在登录和注销后旧的配置文件图像仍然存在。

代码语言:javascript
复制
var user: User!

var dataBaseRef: DatabaseReference!{
    return Database.database().reference()
}
var storageRef: StorageReference!{
    return Storage.storage().reference()
}

func updatePhoto() {
    let user = Auth.auth().currentUser
    let newPhoto = profileImage.image

    let imgData = UIImageJPEGRepresentation(newPhoto!, 0.7)!
    let imagePath = "profileImage\(user.uid)/userPic.jpg"
    let imageRef =  storageRef.child(imagePath)
    let metadata = StorageMetadata()
    metadata.contentType = "image/jpeg"
    imageRef.putData(imgData, metadata: metadata) { (metadata, error) in
        if error == nil {
    let changeRequest = Auth.auth().currentUser?.createProfileChangeRequest()

            if let photoURL = metadata!.downloadURL(){

                changeRequest?.photoURL = photoURL
            }

            changeRequest?.commitChanges(completion: { (error) in
        if error == nil{

            let user = Auth.auth().currentUser

            let userInfo = ["firstLastName": self.nameOld,  "email": self.emailString, "password": self.passwordOld, "location": self.locationOld, "interests": self.interestsOld, "biography": self.bioOld, "uid": self.uid, "photoURL": String(describing: user?.photoURL!)]

            let userRef = self.dataBaseRef.child("users").child((user?.uid)!)
            userRef.setValue(userInfo)
            let credential = EmailAuthProvider.credential(withEmail: self.emailString, password: self.passwordOld)

                    user?.reauthenticate(with: credential) { error in
                        if let error = error {

                            print(error)
                            // An error happened.
                        } else {
                            print("AUTHENTICATED")
                            // User re-authenticated.
                        }
                    }
            print("user info set")

        }

    })
        }}}



func loadUserInfo(){


    let userRef = dataBaseRef.child("users/\(Auth.auth().currentUser!.uid)")

    userRef.observe(.value, with: { (snapshot) in

        let user = Users(snapshot: snapshot)

        if let username = user.firstLastName{
            self.name.text = username
            self.nameOld = username
        }


        if let userLocation = user.location{
            self.location.text = userLocation
            self.locationOld = userLocation
        }
        if let bio = user.biography{
            self.biog.text = bio
            self.bioOld = bio
        }
        if let interests = user.interests{
            self.interests.text = interests
            self.interestsOld = interests 
        }

        if let imageOld = user.photoURL{


            //  let imageURL = user.photoURL!



            self.storageR.reference(forURL: imageOld).getData(maxSize: 10 * 1024 * 1024, completion: { (imgData, error) in

                if error == nil {
                    DispatchQueue.main.async {
                        if let data = imgData {
                            self.profileImage.image = UIImage(data: data)
                        }
                    }

                }else {
                    print(error!.localizedDescription)

                }

            }


            )}


    }) { (error) in
        print(error.localizedDescription)
    }


}

override func viewDidLoad() {
    super.viewDidLoad()
    setGestureRecognizersToDismissKeyboard()
    loadUserInfo()
}



   func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
    if let image = info[UIImagePickerControllerOriginalImage]  as? UIImage{
        self.profileImage.image = image
        updatePhoto()
    }
    else if let image = info[UIImagePickerControllerEditedImage] as? UIImage {
        self.profileImage.image = image
        updatePhoto()
    }
    self.dismiss(animated: true, completion: nil)
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-10 21:19:39

From apple documentation,UIImagePickerControllerEditedImage:指定用户编辑的图像,UIImagePickerControllerOriginalImage:指定用户选择的原始未裁剪图像。如果用户没有编辑选中的图片,也需要调用updatePhoto()函数才能上传选中的照片:

代码语言:javascript
复制
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
    if let image = info[UIImagePickerControllerOriginalImage]  as? UIImage{
        self.profileImage.image = image
        updatePhoto()
    }
    else if let image = info[UIImagePickerControllerEditedImage] as? UIImage {
        self.profileImage.image = image
        updatePhoto()
    }
    self.dismiss(animated: true, completion: nil)
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48183589

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档