我想将图像的下载URL放入Firebase数据库中。我可以将图像上传到存储中,但无法弄清楚如何将URL与其余的“帖子”一起放入数据库。
@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) //how do I put the download URL in the metadata into my database } ) } } @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]) //the myImageURL part is where I get an error 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) } } }
像这样组织您upload和savefunc:
upload
save
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并保存到您的节点即可。
FIRDatabase
@IBAction func addPost(_ sender: Any) { if self.titleText.text != "" && self.authorText.text != "" && self.mainText.text != "" && self.dateText.text != "" { uploadMedia() { url in guard let url = url else { return } ref?.child("Posts").childByAutoId().setValue([ "Title" : titleText.text, "Article" : mainText.text, "Author" : authorText.text, "Date" : dateText.text, "myImageURL" : url ]) } }
您也可以查看我有关上传数据并将URL保存到数据库的答案
希望能帮助到你