首页 文章

UIImagepicker正在上传到错误的Firebase存储

提问于
浏览
0

我有两个图像视图,我习惯让用户上传他们的照片 . 当我上传主要配置文件图片时,一切运行正常,图像存储在相应的Firebase存储子项中,但是当我按下一个图像视图上传我的下一张照片时,它会存储在错误的Firebase存储中 .

我尝试通过两个独立的uiimagepickers解决这个问题,但似乎没有解决问题 . 所以我的问题是,为什么当我按 SecondPhoto 时,它上传到 Profile_Images 而不是 Second_Images 这是我想要的?

import UIKit
import Firebase
import FBSDKLoginKit

class ProfileViewController: UIViewController,     UIImagePickerControllerDelegate, UINavigationControllerDelegate {

@IBOutlet weak var imageView: UIImageView!
@IBOutlet weak var secondPhoto: UIImageView!

override func viewDidLoad() {
    super.viewDidLoad()

    self.imageView.frame.size.width / 2;
    self.imageView.layer.cornerRadius = 24
    self.imageView.clipsToBounds = true;

self.secondPhoto.layer.cornerRadius =   self.secondPhoto.frame.size.height / 2;


    secondPhoto.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(handleSecondProfileImageView)))


    profilePicture.addGestureRecognizer(UITapGestureRecognizer(target:self, action: #selector(handleSelectProfileImageView)))

    let uid = FIRAuth.auth()?.currentUser?.uid
    FIRDatabase.database().reference().child("Users").child(uid!).observeSingleEvent(of: .value, with: {(snapshot) in if let dictionary = snapshot.value as? [String: AnyObject]
    {
        self.imageView.loadImageUsingCachWithUrlString(urlString:dictionary["profileImageUrl"] as! String)
        self.secondPhoto.loadImageUsingCachWithUrlString(urlString:dictionary["secondImageUrl"] as! String)

        }
    }, withCancel: nil)

}
    func handleSelectProfileImageView() {
        let picker = UIImagePickerController()
        picker.delegate = self
        picker.allowsEditing = true
        present(picker, animated: true, completion:nil)
    }
    func imagePickerController(_ picker: UIImagePickerController,  didFinishPickingMediaWithInfo info: [String : Any]) {

        var selectedImageFromPicker:UIImage?


        if let editedImage = info["UIImagePickerControllerEditedImage"] as?  UIImage{
            selectedImageFromPicker = editedImage

        }else if let originalImage =  info["UIIMagePickerControllerOriginalImage"] as? UIImage{
            selectedImageFromPicker = originalImage

        }

        if let selectedImage = selectedImageFromPicker{
            updateProfileImageInFirebase(image: selectedImage)
        }

        dismiss(animated: true, completion: nil)
    }

    func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
        print("canceled picker")
        dismiss(animated: true, completion: nil)
    }

func updateProfileImageInFirebase(image: UIImage){
    let user = FIRAuth.auth()?.currentUser
    guard let uid = user?.uid else {
        return
    }
    if user != nil {
        let imageName = NSUUID().uuidString
        let storageRef =  FIRStorage.storage().reference().child("Profile_Images").child("\(imageName).jpg")
        if let uploadData = UIImageJPEGRepresentation(image, 0.1) {
            storageRef.put(uploadData, metadata: nil, completion: { (metadata, error) in
                if error != nil {
                    print(error!)
                    return
                }

                if let profileImageUrl = metadata?.downloadURL()?.absoluteString {
                    FIRDatabase.database().reference().child("Users").child(uid).updateChildValues(["profileImageUrl": profileImageUrl])
                }
            })
        }
    }
}

func handleSecondProfileImageView() {
    let picker = UIImagePickerController()
    picker.delegate = self
    picker.allowsEditing = true
    present(picker, animated: true, completion:nil)
}
func secondimagePickerController(_ picker: UIImagePickerController,  didFinishPickingMediaWithInfo info: [String : Any]) {

    var selectedImageFromPicker:UIImage?


    if let editedImage = info["UIImagePickerControllerEditedImage"] as?  UIImage{
        selectedImageFromPicker = editedImage

    }else if let originalImage =  info["UIIMagePickerControllerOriginalImage"] as? UIImage{
        selectedImageFromPicker = originalImage

    }

    if let selectedImage = selectedImageFromPicker{
        updatesecondAvatarImageInFirebase(image: selectedImage)
    }

    dismiss(animated: true, completion: nil)
}

func secondimagePickerControllerDidCancel(_ picker: UIImagePickerController) {
    print("canceled picker")
    dismiss(animated: true, completion: nil)
}

func updatesecondAvatarImageInFirebase(image: UIImage){
    let user = FIRAuth.auth()?.currentUser
    guard let uid = user?.uid else {
        return
    }
    if user != nil {
        let imageName = NSUUID().uuidString
        let storageRef =  FIRStorage.storage().reference().child("Second_Images").child("\(imageName).jpg")
        if let uploadData = UIImageJPEGRepresentation(image, 0.1) {
            storageRef.put(uploadData, metadata: nil, completion: { (metadata, error) in
                if error != nil {
                    print(error!)
                    return
                }

                if let secondImageUrl = metadata?.downloadURL()?.absoluteString {
                    FIRDatabase.database().reference().child("Users").child(uid).updateChildValues(["secondImageUrl": secondImageUrl])
                }
            })
        }
    }
}

}

1 回答

  • 0

    我能够通过向按钮添加标签和使用开关控件来解决它

相关问题