【问题标题】:Firebase Upload URL to real time databaseFirebase 将 URL 上传到实时数据库
【发布时间】:2019-06-07 08:34:18
【问题描述】:

我正在尝试将图像 url 从 Firebase 存储上传到实时数据库。

这是代码

  @IBOutlet weak var jobTitle: UITextField!
@IBOutlet weak var companyName: UITextField!
@IBOutlet weak var jobLocation: UITextField!
@IBOutlet weak var ImageView1stPoster: UIImageView!
var imageUploaded = Data()
var URLtoRealtime = ""

 func addPost() {
    ref.child("Poster").childByAutoId().setValue(["jobName": jobTitle.text as Any,
                                                 "companyTitle": companyName.text as Any,
                                                 "jobLocation": jobLocation.text as Any,
                                                 "firstPoster": URLtoRealtime as Any,
                                                /*,
         "timeStamp":[".sv":"timestamp"]*/]
        as[String:Any])
}


//  DoneButton to submit everthing :)
@IBAction func DoneButton(_ sender: Any) {
  uploadImageToFirebase(imageData: imageUploaded)
    createAlert(title: "Post has been submitted", message: "Going to home page")
    addPost()

}


func uploadImageToFirebase(imageData: Data) {
    // References and vars
    let StorageRefrenece = Storage.storage().reference()
    let currentUser = Auth.auth().currentUser
    let posterImageRef = StorageRefrenece.child("posters").child(currentUser!.uid).child("posterOne.jpg")

    let uploadMetaData = StorageMetadata()
    uploadMetaData.contentType = "image/jpeg"

    // putData to put data to the server using MetaData to orignize everthing.
    posterImageRef.putData(imageData, metadata: uploadMetaData) { (uploadedImageMeta, error) in
        if error != nil {
            print("Error Took place \(String(describing: error?.localizedDescription))")
            return
        } else {
            print("metaData of uploaded image \(uploadMetaData)")
        }
    }

    posterImageRef.downloadURL { (url, error) in
        if (error != nil) {
            // Handle any errors
            print(error!.localizedDescription)
            print("NOOOPPPEEE")
        } else {
            // Get the download URL for 'images/stars.jpg'
            print("Working Good")
            let UrlString = url!.absoluteString
            print(UrlString)
            self.URLtoRealtime = UrlString
        }

    }


}

我正在尝试制作 URLString = URLtoRealtime 数据,然后 将帖子添加到 Firebase。 但发生的是它之前执行 addPost() 函数 self.URLtoRealtime = UrlString

我不知道如何让程序在addpost()函数之前执行上一行代码。

【问题讨论】:

标签: swift firebase firebase-realtime-database firebase-storage


【解决方案1】:

当触摸完成按钮时,您将图像异步上传到 firebase 并下载 URL。但是,正如您所指出的,当您 addPost 时,该 URL 尚未下载 - 您想要一个接一个地下载。

@IBAction func DoneButton(_ sender: Any) {
    uploadImageToFirebase(imageData: imageUploaded) { [weak self] (url, error) in
        if let url = url {
            createAlert(title: "Post has been submitted", message: "Going to home page")
            self?.URLtoRealtime = url.absoluteString
            self?.addPost()
        } else {
            self?.createAlert(title: "Post could not be submitted", message: "Try again")
        }
    }
}

我们可以在上传方法中添加一个完成参数,以便在 URL 的上传和下载完成后您可以addPost

func uploadImageToFirebase(imageData: Data, completion: @escaping (URL?, Error?) -> ()) {

    guard let uid = Auth.auth().currentUser?.uid else { return completion(nil, nil) }

    let posterImageRef = Storage.storage().reference(withChild: "posters/\(uid)/posterOne.jpg")
    let uploadMetaData = StorageMetadata(dictionary: [ "contentType": "image/jpeg" ])

    posterImageRef.putData(imageData, metadata: uploadMetaData) { (metadata, error) in
        if let ref = metadata?.storageReference {
            ref.downloadURL(completion: { (url, error) in
                completion(url, error)
            })
        } else {
            completion(nil, error)
        }
    }
}

【讨论】:

  • 我刚刚复制并粘贴了您的代码。当我上传图片时,它总是让我“无法提交帖子”
  • 如果你没有得到一个 url,你可能会得到一个错误。在警报之后打印它会发生什么?
  • 我已经调整了您的第二个代码以使其适合我的项目并且它现在正在工作。谢谢 :)))))
猜你喜欢
  • 2021-01-31
  • 1970-01-01
  • 1970-01-01
  • 2018-11-22
  • 2023-03-11
  • 1970-01-01
  • 2020-04-21
  • 1970-01-01
  • 2020-09-20
相关资源
最近更新 更多