2017-05-19 104 views
4

我想將圖像的下載網址放入我的Firebase數據庫。我可以將圖片上傳到存儲中,但我無法弄清楚如何將網址與其他「帖子」一起放入我的數據庫。先謝謝了!將圖像上傳到Firebase存儲和數據庫

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

//我怎麼把元數據下載URL到我的數據庫

 } 
     ) 
    } 

} 

@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]) 

//的myImageURL部分是我得到一個錯誤

 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) 

    } 
} 

}

回答

7

組織你的uploadsave這樣的funcs:

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

接下來只需連接到FIRDatabase並將它保存到您的節點。

@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! 
            ]) 
      } 
    } 
} 

你也可以看到這個my answer對上傳數據和保存URL的數據庫

希望它可以幫助

+0

那麼,如何把它放在我的數據庫? ref。.child(「Posts」)。childByAutoId()。setValue([「Title」:titleText.text,「Article」:mainText.text,「Author」:authorText.text,「Date」:dateText.text]) – Riccardo

+0

@Riccardo我會更新我的答案 –

+0

@Riccardo完成:) –

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

     }) 

    } 
}