如何将一组图像保存到firebase数据库中?

时间:2022-12-14 00:28:31

I have an app where a user takes some pictures which are saved into an array, then when he presses a button i want the array of images to be saved to firebase. I have searched around and not found any good resources for this. Bellow is the code I have already written.

我有一个应用程序,用户拍摄一些保存到数组中的图片,然后当他按下按钮时,我希望将图像数组保存到firebase。我四处搜寻,没有找到任何好的资源。贝娄是我已经写过的代码。

DataModel where I save the array of images:

我保存图像数组的DataModel:

import Foundation
import UIKit

class PhotoArray {
    static let sharedInstance = PhotoArray()
    var photosArray: [UIImage] = []
}

Taking picture code:

拍照代码:

import UIKit
import RealmSwift

class ViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate {

    // var realm: Realm!
//    var photoArray = [PhotoArray]()

    @IBOutlet weak var imageView: UIImageView!

    let imagePicker = UIImagePickerController()

    override func viewDidLoad() {
        super.viewDidLoad()
        // realm = try! Realm()
        imagePicker.delegate = self
        imagePicker.sourceType = .camera
        imagePicker.allowsEditing = false
    }

    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {

        if let userPickedImage = info[UIImagePickerControllerOriginalImage] as? UIImage {

//            let imageToUse = PhotoArray()

//            let data = UIImagePNGRepresentation(userPickedImage) //here convert to data

            PhotoArray.sharedInstance.photosArray.append(userPickedImage)  //append converted data in array

            //                do {
            //                    try realm.write {
            //                        realm.add(imageToUse)
            //                    }
            //                } catch {
            //                    print(“error adding image to array\(error)“)
            //                }

            imageView.image = userPickedImage
        }
//        print(PhotoArray().photosArray.count)
        imagePicker.dismiss(animated: true, completion: nil)
    }

    @IBAction func cameraButtonPressed(_ sender: UIButton) {
        present(imagePicker, animated: true, completion: nil)
    }

@IBAction func cameraButtonPressed(_ sender: UIButton) {
    present(imagePicker, animated: true, completion: nil)
}

@IBAction func SendDataPressed(_ sender: UIButton) {
    //TODO: Send the Images to Firebase and save it in our database

    let messagesDB = Database.database().reference().child("Images")

    let messageDictionary = ["Images": PhotoArray.sharedInstance.photosArray as NSArray]

    messagesDB.childByAutoId().setValue(messageDictionary) {
        (error, refrence) in

        if error != nil {
            print(error!)
            //somthing
        }
        else {
            print("message saved succesfully")
            //somthing
        }
    }

}

}

1 个解决方案

#1


2  

Firebase databases don't support adding images to the database. You can find the supported Firebase data types here.

Firebase数据库不支持将图像添加到数据库。您可以在此处找到支持的Firebase数据类型。

You should instead upload your images to a storage provider such as Firebase Cloud Storage and then save the url to that file in your database to download from later.

您应该将图像上传到存储提供商(如Firebase Cloud Storage),然后将该URL保存到数据库中,以便以后下载。

Here's an example:

这是一个例子:

//Create a reference to the image
let imageRef = Storage.storage().reference().child("image.jpg")

// Get image data
if let uploadData = UIImagePNGRepresentation(userPickedImage) {

    // Upload image to Firebase Cloud Storage
    imageRef.putData(uploadData, metadata: nil) { (metadata, error) in
        guard error == nil else {
            // Handle error
            return
        }
        // Get full image url
        imageRef.downloadURL { (url, error) in
            guard let downloadURL = url else {
                // Handle error
                return
            }

            // Save url to database
            Firestore.firestore().collection("images").document("myImage").setData(["imageUrl" : downloadUrl.absoluteString])
        }
    }
}

#1


2  

Firebase databases don't support adding images to the database. You can find the supported Firebase data types here.

Firebase数据库不支持将图像添加到数据库。您可以在此处找到支持的Firebase数据类型。

You should instead upload your images to a storage provider such as Firebase Cloud Storage and then save the url to that file in your database to download from later.

您应该将图像上传到存储提供商(如Firebase Cloud Storage),然后将该URL保存到数据库中,以便以后下载。

Here's an example:

这是一个例子:

//Create a reference to the image
let imageRef = Storage.storage().reference().child("image.jpg")

// Get image data
if let uploadData = UIImagePNGRepresentation(userPickedImage) {

    // Upload image to Firebase Cloud Storage
    imageRef.putData(uploadData, metadata: nil) { (metadata, error) in
        guard error == nil else {
            // Handle error
            return
        }
        // Get full image url
        imageRef.downloadURL { (url, error) in
            guard let downloadURL = url else {
                // Handle error
                return
            }

            // Save url to database
            Firestore.firestore().collection("images").document("myImage").setData(["imageUrl" : downloadUrl.absoluteString])
        }
    }
}