2017-07-05 7 views
1

existiert Ich versuche, ein Bild zu Feuerbasis Speicherung zu laden, aber ich diesen Fehler nach ein Bild von Foto-Bibliothek auswählen und bevor Sie auf „wählen“ Button:Firebase für iOS Fehler beim Hochladen eines Bildes: Objekt nicht

„Erstellen eines Bildformat mit einem unbekannten Typ ist ein Fehler“

auch ich erhalte „Objekt existiert nicht“ nach einem Klick auf „Upload“ klicken.

Error

Hier ist mein Code:

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) 
       } 
      }) 
     } 
    } 
} 

Antwort

0

ich gerade herausgefunden, wie es funktioniert. Gemäß Firebase-Speicherbeispiel mit swift 3 erfordert der Speicher zuerst eine Authentifizierung.

Referenz: Firebase GitHub example

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] 
    } 
} 
Verwandte Themen