Uploading Images from UIImage Picker onto new Firebase (Swift)

后端 未结 3 852
我寻月下人不归
我寻月下人不归 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:25

    Simple 2020 example

    1. Don't forget to add pod 'Firebase/Storage' to your podfile, and pod install

    2. Add two delegates to your class

      class YourScreen: UIViewController, 
        UIImagePickerControllerDelegate, UINavigationControllerDelegate {
      
    3. Storyboard, button, link to ...

      @IBAction func tapCameraButton() {
      let picker = UIImagePickerController()
      picker.allowsEditing = true
      picker.delegate = self
      present(picker, animated: true)
      }
      

      and then

      func imagePickerController(_ picker: UIImagePickerController,
      didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
      
       guard let im: UIImage = info[.editedImage] as? UIImage else { return }
       guard let d: Data = im.jpegData(compressionQuality: 0.5) else { return }
      
       let md = StorageMetadata()
       md.contentType = "image/png"
      
       let ref = Storage.storage().reference().child("someFolder/12345678.jpg")
      
       ref.putData(d, metadata: md) { (metadata, error) in
           if error == nil {
               ref.downloadURL(completion: { (url, error) in
                   print("Done, url is \(String(describing: url))")
               })
           }else{
               print("error \(String(describing: error))")
           }
       }
      
       dismiss(animated: true)
      }
      

    But where do you put the image?

    At the code,

    ... .child("someFolder/12345678.jpg")
    

    Almost inevitably,

    • as the folder name use the user's id, the chat id, the feed id or a similar concept

    • for the name, the only possibility is a uuid

    Hence almost always

    let f = chatId + "/" + UUID().uuidString + ".jpg"
    let ref = Storage.storage().reference().child(f)
    

提交回复
热议问题