上载图像时Firebase for iOS错误:对象不存在

上载图像时Firebase for iOS错误:对象不存在,ios,swift,firebase,firebase-storage,Ios,Swift,Firebase,Firebase Storage,我正在尝试将图像上载到firebase存储,但在从照片库中选择图像后,在单击“选择”按钮之前,我遇到此错误: “创建类型未知的图像格式时出错” 此外,我得到“对象不存在”后,点击“上传”按钮 这是我的密码: import UIKit import Firebase import FirebaseAuth import FirebaseStorage import FirebaseDatabase class uploadVC: UIViewController, UIImagePickerC

我正在尝试将图像上载到firebase存储,但在从照片库中选择图像后,在单击“选择”按钮之前,我遇到此错误:

“创建类型未知的图像格式时出错”

此外,我得到“对象不存在”后,点击“上传”按钮

这是我的密码:

import UIKit
import Firebase
import FirebaseAuth
import FirebaseStorage
import FirebaseDatabase

class uploadVC: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate {
    @IBOutlet weak var imgPost: UIImageView!
    @IBOutlet weak var txtPost: UITextView!
    var uuid = NSUUID().uuidString

    override func viewDidLoad() {
        super.viewDidLoad()

        imgPost.isUserInteractionEnabled = true
        let gestureRecognizer = UITapGestureRecognizer(target: self, 
        action: #selector(uploadVC.selectImage))
        imgPost.addGestureRecognizer(gestureRecognizer)
    }

    func selectImage() {
        let picker = UIImagePickerController()
        picker.delegate = self
        picker.sourceType = .photoLibrary
        picker.allowsEditing = true
        present(picker, animated: true, completion: nil)
    }

    func imagePickerController(_ picker: UIImagePickerController, 
        didFinishPickingMediaWithInfo info: [String : Any]) {
        imgPost.image = info[UIImagePickerControllerEditedImage] as? 
        UIImage
        self.dismiss(animated: true, completion: nil)
    }

    @IBAction func btnUpload(_ sender: Any) {
        let mediaFolder = Storage().reference().child("media")
        if let data = UIImageJPEGRepresentation(imgPost.image!, 0.5) {
            mediaFolder.child("\(uuid).jpg").putData(data, metadata: nil, 
            completion: { (metadata, error) in
                if error != nil {
                    let alert = UIAlertController(title: "Error", message: 
                    error?.localizedDescription, preferredStyle: 
                    UIAlertControllerStyle.alert)
                    let ok = UIAlertAction(title: "OK", style: 
                    UIAlertActionStyle.cancel, handler: nil)
                    alert.addAction(ok)
                    self.present(alert, animated: true, completion: nil)
                } else {
                    print(metadata?.downloadURL()?.absoluteString)
                }
            })
        }
    }
}

我刚弄明白它是怎么工作的。 根据带有swift 3的Firebase存储样本,存储首先需要验证

参考:

import UIKit
import Photos
import Firebase
import FirebaseAuth
import FirebaseStorage
import FirebaseDatabase

class uploadVC: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate {

    @IBOutlet weak var imgPost: UIImageView!
    @IBOutlet weak var txtPost: UITextView!

    var uuid = NSUUID().uuidString
    var storageRef: StorageReference!
    var imageFile: URL?
    var filePath: String?

    override func viewDidLoad() {
        super.viewDidLoad()

        // [START configurestorage]
        storageRef = Storage.storage().reference()
        // [END configurestorage]

        // [START storageauth]
        // Using Cloud Storage for Firebase requires the user be authenticated. Here we are using
        // anonymous authentication.
        if Auth.auth().currentUser == nil {
            Auth.auth().signInAnonymously(completion: { (user: User?, error: Error?) in
                if let error = error {
                    let alert = UIAlertController(title: "Error", message: error.localizedDescription, preferredStyle: UIAlertControllerStyle.alert)
                    let ok = UIAlertAction(title: "OK", style: UIAlertActionStyle.cancel, handler: nil)
                    alert.addAction(ok)
                    self.present(alert, animated: true, completion: nil)
                }
            })
        }
        // [END storageauth]

        imgPost.isUserInteractionEnabled = true
        let gestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(uploadVC.selectImage))
        imgPost.addGestureRecognizer(gestureRecognizer)
    }

    func selectImage() {
        let picker = UIImagePickerController()
        picker.delegate = self
        picker.sourceType = .photoLibrary
        picker.allowsEditing = true
        present(picker, animated: true, completion: nil)
    }

    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
        imgPost.image = info[UIImagePickerControllerEditedImage] as? UIImage
        picker.dismiss(animated: true, completion:nil)
        if #available(iOS 8.0, *), let referenceUrl = info[UIImagePickerControllerReferenceURL] as? URL {
            let assets = PHAsset.fetchAssets(withALAssetURLs: [referenceUrl], options: nil)
            let asset = assets.firstObject
            asset?.requestContentEditingInput(with: nil, completionHandler: { (contentEditingInput, info) in
                self.imageFile = contentEditingInput?.fullSizeImageURL
                self.filePath = "media/" + "\(self.uuid).jpg"
            })
        }
    }

    @IBAction func btnUpload(_ sender: Any) {
        // [START uploadimage]
        self.storageRef.child(filePath!)
            .putFile(from: imageFile!, metadata: nil) { (metadata, error) in
                if let error = error {
                    let alert = UIAlertController(title: "Error", message: error.localizedDescription, preferredStyle: UIAlertControllerStyle.alert)
                    let ok = UIAlertAction(title: "OK", style: UIAlertActionStyle.cancel, handler: nil)
                    alert.addAction(ok)
                    self.present(alert, animated: true, completion: nil)
                    return
                }
                print(metadata?.downloadURL()?.absoluteString ?? "nothing")
        }
        // [END uploadimage]
    }
}