2017-05-19 24 views
4

Ich möchte die Download-URL von Bildern in meine Firebase-Datenbank einfügen. Ich kann das Image in den Speicher hochladen, aber ich kann nicht herausfinden, wie ich die URL mit dem Rest des "Posts" in meine Datenbank bringen kann. Danke im Voraus!Bild auf Firebase-Speicher und Datenbank hochladen

@IBOutlet weak var titleText: UITextField! 
@IBOutlet weak var authorText: UITextField! 
@IBOutlet weak var mainText: UITextView! 
@IBOutlet weak var dateText: UITextField! 
@IBOutlet weak var myImageView: UIImageView! 

var ref:FIRDatabaseReference? 

override func viewDidLoad() { 
    super.viewDidLoad() 

    ref = FIRDatabase.database().reference() 

} 


override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
} 


@IBAction func uploadImage(_ sender: Any) { 


     let image = UIImagePickerController() 
    image.delegate = self 
    image.sourceType = UIImagePickerControllerSourceType.photoLibrary 

    image.allowsEditing = false 

    self.present(image, animated: true) 
    { 
     //after its completed 
    } 
} 


@objc(imagePickerController:didFinishPickingMediaWithInfo:) func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) 
{ 
    if let image = info[UIImagePickerControllerOriginalImage] as? UIImage 
    { 
     myImageView.image = image 

    } 
    else 
    { 
     //error 
    } 

    self.dismiss(animated: true, completion: nil) 

    let storageRef = FIRStorage.storage().reference().child("myImage.png") 
    if let uploadData = UIImagePNGRepresentation(self.myImageView.image!){ 
     storageRef.put(uploadData, metadata: nil, completion: 
      { 
       (metadata, error) in 
       if error != nil { 
        print("error") 
        return 
       } 

    print(metadata) 

// Wie kann ich die Download-URL in den Metadaten in der Datenbank

 } 
     ) 
    } 

} 

@IBAction func addPost(_ sender: Any) { 

    if self.titleText.text != "" && self.authorText.text != "" && self.mainText.text != "" && self.dateText.text != "" 
    { 

     ref?.child("Posts").childByAutoId().setValue(["Title": titleText.text,"Article": mainText.text, "Author": authorText.text, "Date": dateText.text, "myImageURL": myImageURL]) 

// die myImageURL Teil ist, wo ich einen Fehler

 self.performSegue(withIdentifier: "post", sender: self) 

    } 
    else{ 

     let alertController = UIAlertController(title: "Oops!", message: "Field left blank", preferredStyle: .alert) 

     let defaultAction = UIAlertAction(title: "Ok", style: .cancel, handler: nil) 
     alertController.addAction(defaultAction) 

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

    } 
} 

}

Antwort

7

Organisieren Sie Ihre upload und save Funktionen wie folgt:

func uploadMedia(completion: @escaping (_ url: String?) -> Void) { 
    let storageRef = FIRStorage.storage().reference().child("myImage.png") 
    if let uploadData = UIImagePNGRepresentation(self.myImageView.image!) { 
     storageRef.put(uploadData, metadata: nil) { (metadata, error) in 
      if error != nil { 
       print("error") 
       completion(nil) 
      } else { 
       completion((metadata?.downloadURL()?.absoluteString)!)) 
       // your uploaded photo url. 
      } 
     } 
} 

Als nächstes verbinden Sie sich einfach mit FIRDatabase und speichern Sie es auf Ihrem Knoten.

@IBAction func addPost(_ sender: Any) { 
    if self.titleText.text != "" && self.authorText.text != "" 
     && self.mainText.text != "" && self.dateText.text != "" { 

    uploadMedia() { url in 
      if url != nil { 
       ref?.child("Posts").childByAutoId().setValue([ 
            "Title"  : titleText.text, 
            "Article" : mainText.text, 
            "Author"  : authorText.text, 
            "Date"  : dateText.text, 
            "myImageURL" : url! 
            ]) 
      } 
    } 
} 

Sie können auch diese my answer über siehe Hochladen von Daten und URL zur Datenbank Speichern

Hoffe, es

+0

hilft So wie ich es in meiner Datenbank setzen? ref? .child ("Beiträge"). childByAutoId(). setValue (["Titel": titleText.text, "Artikel": mainText.text, "Autor": authorText.text, "Datum": dateText.text]) – Riccardo

+0

@Riccardo Ich werde meine Antwort aktualisieren –

+0

@Riccardo fertig :) –

0
//MARK: - Upload image 
func uploadImage(_ image: UIImage){ 

    let imageName:String = String("\(CurrentTimeStampInSecond).png") 

    let storageRef = Storage.storage().reference().child("profilePic").child(imageName) 
    let compressImage = HelperFunction.helper.resizeImage(image: image) 
    if let uploadData = UIImagePNGRepresentation(compressImage){ 
     storageRef.putData(uploadData, metadata: nil 
      , completion: { (metadata, error) in 
       if error != nil { 
        print("error") 
        self.stopAnimating() 
        showAlertWithTitleWithMessage(message: "Please try again later") 
        return 
       }else{ 
        self.stopAnimating() 
       } 

       let strPic:String = (metadata?.downloadURL()?.absoluteString)! 

       print(metadata) 
       //self.imagePath = (metadata?.downloadURL()?.absoluteString)! 
       //self.sendMessageOnServer() 
       print("\n\n\n\n\n\n ===download url : \(strPic)") 

     }) 

    } 
}