微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

swift – 将图像上传到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)

        }
    }
}
组织您的上传并保存这样的功能
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保存到数据库my answer

希望能帮助到你

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐