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

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

}

}

}

回答:

像这样组织您uploadsavefunc:

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

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保存到数据库的答案

希望能帮助到你

以上是 将图像上传到Firebase存储和数据库 的全部内容, 来源链接: utcz.com/qa/405343.html

回到顶部