1

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

我保存图像数组的DataModel:

import Foundation
import UIKit

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

拍照代码:

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
        }
    }

}

}
4

1 回答 1

2

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

相反,您应该将图像上传到存储提供商,例如Firebase Cloud Storage,然后将 URL 保存到数据库中的该文件以供以后下载。

这是一个例子:

//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])
        }
    }
}
于 2018-08-15T16:35:53.113 回答