将图像上传到Firebase存储

时间:2016-09-21 00:37:27

标签: ios swift firebase firebase-storage

我正在使用这个简单的代码将图像上传到firebase存储。

let imageName = UUID().uuidString
        let storageRef = FIRStorage.storage().reference().child("Devices_Images").child("\(imageName).png")

       // let metaData = FIRStorageMetadata()
       // metaData.contentType = "image/png"

        if let uploadData = UIImagePNGRepresentation(self.ImageView.image!) {
            storageRef.put(uploadData, metadata: nil, completion: { (data, error) in
                if error != nil {
                    print(error)

                } else {
                    print("Image Uploaded Succesfully")
                    let profileImageUrl = data?.downloadURL()?.absoluteString
             }       

我一直收到这个错误:

[Generic] Creating an image format with an unknown type is an error

实际上转换和图片类型都是png!所以为什么我一直收到这个错误!

图像从alpum或相机上传,如下所示:

 func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
    let theInfo:NSDictionary = info as NSDictionary
    let img:UIImage = theInfo.object(forKey: UIImagePickerControllerOriginalImage) as! UIImage
    ImageView.image = img
    self.dismiss(animated: true, completion: nil)
}

@IBAction func AddPictureBtnAction(_ sender: AnyObject) {
    // addPictureBtnAtion.enabled = false
    let alertController : UIAlertController = UIAlertController(title: "أضف جهازًا", message: "التقط صورة من الكاميرا أو اختر من الألبوم", preferredStyle: .actionSheet)

    let cameraAction : UIAlertAction = UIAlertAction(title: "صورة من الكاميرا", style: .default, handler: {(cameraAction) in
        print("camera Selected...")

        if UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.camera) == true {

            self.imagePicker.sourceType = .camera
            self.present()

        }else{
            self.present(self.showAlert("عذرًا", Message: "الكاميرا ليست متاحة في هذا الجهاز أو تم منع الوصول لها!"), animated: true, completion: nil)

        }

    })

    let libraryAction : UIAlertAction = UIAlertAction(title: "صورة من الألبوم", style: .default, handler: {(libraryAction) in

        print("Photo library selected....")

        if UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.photoLibrary) == true {

            self.imagePicker.sourceType = .photoLibrary
            self.present()

        }else{

            self.present(self.showAlert("عذرًا", Message: "ألبوم الصور ليس متاحًا في هذا الجهاز أو تم منع الوصول له!"), animated: true, completion: nil)
        }
    })

    let cancelAction : UIAlertAction = UIAlertAction(title: "إلغاء", style: .cancel , handler: {(cancelActn) in
        print("Cancel action was pressed")
    })

    alertController.addAction(cameraAction)

    alertController.addAction(libraryAction)

    alertController.addAction(cancelAction)

    alertController.popoverPresentationController?.sourceView = view
    alertController.popoverPresentationController?.sourceRect = view.frame

    self.present(alertController, animated: true, completion: nil)
}


func present(){
    self.present(imagePicker, animated: true, completion: nil)
}


/*   func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) {
 print("info of the pic reached :\(info) ")
 self.imagePicker.dismissViewControllerAnimated(true, completion: nil)

 } */

//Show Alert
func showAlert(_ Title : String!, Message : String!)  -> UIAlertController {

    let alertController : UIAlertController = UIAlertController(title: Title, message: Message, preferredStyle: .alert)
    let okAction : UIAlertAction = UIAlertAction(title: "Ok", style: .default) { (alert) in
        print("User pressed ok function")

    }
    alertController.addAction(okAction)
    alertController.popoverPresentationController?.sourceView = view
    alertController.popoverPresentationController?.sourceRect = view.frame
    return alertController
}

1 个答案:

答案 0 :(得分:0)

添加" _"在imagePicker方法的参数中。

func imagePickerController(_ picker: UIImagePickerController ...

然后上传: -

   //if let uploadData = UIImagePNGRepresentation(UIImage(cgImage: self.imageView.image! as! CGImage, scale: 1.0, orientation: .up)) as? NSData {
   if let uploadData = UIImagePNGRepresentation(self.ImageView.image!) as? NSData {  



         storageRef.put(uploadData!, metadata: nil, completion: { (metadata, error) in
        if error != nil {
                print(error)

            } else {
                print("Image Uploaded Succesfully")
                let profileImageUrl = data?.downloadURL()?.absoluteString
         }  
    })
  }