请注意,我是IOS开发的新手,尤其是Swift。我已经在连接到常规“配置文件”视图控制器的视图控制器中创建了“编辑配置文件页面”。在此编辑个人资料视图控制器上,用户可以更改其个人资料图片和封面照片。我很难理解如何在用户选择图像并单击“保存按钮”后,如何允许用户将其照片上传到firebase,一旦他们单击“保存”按钮,我希望它上传图像,然后将其重定向到常规个人资料视图。我已阅读其他文章并观看了其他教程,但无法获得成功上传两个图像的结果。到目前为止,这是我的代码,没有任何将图像上传到Firebase的调用。
import UIKit
import Foundation
import Firebase
import FirebaseDatabase
class NewEditProfileViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate {
@IBOutlet weak var imageView1: UIImageView!
@IBOutlet weak var imageView2: UIImageView!
var imagePicker = UIImagePickerController()
var imagePicked = 0
var selectedImage1: UIImage?
override func viewDidLoad() {
super.viewDidLoad()
imagePicker.delegate = self
imagePicker.sourceType = .photoLibrary
imagePicker.allowsEditing = true
}
@IBAction func chooseImage1(_ sender: Any) {
if UIImagePickerController.isSourceTypeAvailable(UIImagePickerController.SourceType.photoLibrary){
imagePicked = (sender as AnyObject).tag
present(imagePicker, animated: true)
}
}
@IBAction func chooseImage2(_ sender: Any) {
if UIImagePickerController.isSourceTypeAvailable(UIImagePickerController.SourceType.photoLibrary){
imagePicked = (sender as AnyObject).tag
present(imagePicker, animated: true)
}
}
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
let pickedImage = info[UIImagePickerController.InfoKey.editedImage] as? UIImage
if imagePicked == 1 {
imageView1.image = pickedImage
} else if imagePicked == 2 {
imageView2.image = pickedImage
}
dismiss(animated: true)
}
func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
dismiss(animated: true)
}
@IBAction func saveButton(_ sender: Any) {
}
@IBAction func backButton(_ sender: Any) {
self.dismiss(animated: true, completion: nil)
}
}
谢谢您的帮助!就像我说的那样,Swift和Firebase总体上对我来说是一个新概念。
答案 0 :(得分:0)
如果我正确理解了您的问题,我想您是在询问如何将图像上传到Firebase,以响应保存图像的请求。我希望即使您没有IOS知识,也拥有Firebase知识来理解以下答案。
首先如下更新您的Save
/ upload
操作
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
并将其保存到节点。请注意,这里的节点位于我制作的结构下,因此您必须根据您的节点strucutre调整此方法,或者上载您的strucutre并编辑答案。
@IBAction func addPost(_ sender: Any) {
uploadMedia() { url in
guard let url = url else { return }
ref?.child("Posts").childByAutoId().setValue([
"myImageURL" : url
])
}
}
您也可以参考this进行进一步说明