将多个图像上传到 Firebase

Posted

技术标签:

【中文标题】将多个图像上传到 Firebase【英文标题】:Uploading multiple images to firebase 【发布时间】:2019-11-16 07:49:18 【问题描述】:

提醒一下,我是 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 总体上对我来说是一个新概念。

【问题讨论】:

这能回答你的问题吗? How to upload multiple image on firebase using swift? 这个问题有点不清楚,并且没有包含任何与 Firebase 或 Firebase 存储相关的代码。您是在问如何在 viewController 之间移动还是在问如何将图像上传到 Firebase 存储?如果是后者,Uploading Image 上的 Firebase 文档非常有帮助。您能否澄清您的要求并花点时间查看How to create a Minimal, Complete, and Verifiable example 【参考方案1】:

如果我正确理解了您的问题,我认为您是在询问如何根据保存图像的请求将图像上传到 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 并将其保存到节点。请注意,这里的节点是我制作的结构,因此您必须根据您的节点结构调整此方法或上传您的结构并编辑答案。

@IBAction func addPost(_ sender: Any) 


 uploadMedia()  url in 
      guard let url = url else  return 
      ref?.child("Posts").childByAutoId().setValue([
                           "myImageURL" : url
                            ])
     
  

您也可以参考this 进一步澄清

【讨论】:

以上是关于将多个图像上传到 Firebase的主要内容,如果未能解决你的问题,请参考以下文章

将多个图像上传到 Firebase

将多个图像上传到队列中的服务器

使用 multer 将多个图像上传到 AWS S3

将多个图像上传到服务器时出现内存问题

一次将多个图像上传到 Firebase

forEach不是将多个图像上传到cloudinary的函数