gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-30 22:06:12 25 4
gpt4 key购买 nike

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

你也可以看看my answer关于上传数据和保存 URL 到数据库

关于swift - 将图像上传到 Firebase 存储和数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44060518/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com