Uploading Images from UIImage Picker onto new Firebase (Swift)

后端 未结 3 855
我寻月下人不归
我寻月下人不归 2020-12-23 13:10

I have a UIImagePicker set up within my app that works fine. I would like to upload a profile picture to Firebase when my UIImage picker has been chosen. Here is my function

3条回答
  •  孤独总比滥情好
    2020-12-23 13:15

    Working in Swift 4.2

    Here i am doing click on image i have added tapGesture then it open gallery then selected image that upload in Firebase and also i add textField Value Too i hope it helps you Thank You

    import UIKit
    import Firebase
    class ViewController: UIViewController {
    
        @IBOutlet var myImageView: UIImageView!
        @IBOutlet var txtText: UITextField!
        var ref = DatabaseReference.init()
        var imagePicker = UIImagePickerController()
    
        override func viewDidLoad() {
            super.viewDidLoad()
            self.ref = Database.database().reference()
            let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(ViewController.openGalleryClick(tapGesture:)))
            myImageView.isUserInteractionEnabled = true
            myImageView.addGestureRecognizer(tapGestureRecognizer)
            myImageView.backgroundColor = UIColor.red
        }
    
        @objc func openGalleryClick(tapGesture: UITapGestureRecognizer){
            self.setupImagePicker()
        }
    
        @IBAction func btnSaveClick(_ sender: UIButton) {
             self.saveFIRData()
        }
    
        func saveFIRData(){
            self.uploadMedia(image: myImageView.image!){ url in
                self.saveImage(userName: self.txtText.text!, profileImageURL: url!){ success in
                    if (success != nil){
                        self.dismiss(animated: true, completion: nil)
                    }
    
                }
            }
        }
    
    
        func uploadMedia(image :UIImage, completion: @escaping ((_ url: URL?) -> ())) {
            let storageRef = Storage.storage().reference().child("myimage.png")
            let imgData = self.myImageView.image?.pngData()
            let metaData = StorageMetadata()
            metaData.contentType = "image/png"
            storageRef.putData(imgData!, metadata: metaData) { (metadata, error) in
                if error == nil{
                    storageRef.downloadURL(completion: { (url, error) in
                        completion(url)
                    })
                }else{
                    print("error in save image")
                    completion(nil)
                }
            }
        }
    
        func saveImage(userName:String, profileImageURL: URL , completion: @escaping ((_ url: URL?) -> ())){
            let dict = ["name": "Yogesh", "text": txtText.text!, "profileImageURL": profileImageURL.absoluteString] as [String : Any]
            self.ref.child("chat").childByAutoId().setValue(dict)
        }
    
    }
    
    
    extension ViewController: UINavigationControllerDelegate, UIImagePickerControllerDelegate{
    
        func setupImagePicker(){
            if UIImagePickerController.isSourceTypeAvailable(.savedPhotosAlbum){
                imagePicker.sourceType = .savedPhotosAlbum
                imagePicker.delegate = self
                imagePicker.allowsEditing = true
    
                self.present(imagePicker, animated: true, completion: nil)
            }
        }
    
        func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
    
            let image = info[UIImagePickerController.InfoKey.originalImage] as! UIImage
            myImageView.image = image
            picker.dismiss(animated: true, completion: nil)
        }
    
    
    }
    

提交回复
热议问题