将图像上传到Firebase存储和数据库

问题描述:

我想将图像的下载网址放入我的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) 

    } 
} 

}

组织你的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完成:) –

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

     }) 

    } 
}