如何使用 iOS Swift 在 Firebase 存储中将一组图像全部存储在一个路径下

How to store an array of images in Firebase Storage all under 1 path using iOS Swift

我有 2 个视图,ViewOne 和 ViewTwo。

ViewOne 内部有 4 个 imageView 插座和一个 postButton。一旦用户按下 post 按钮,所有图像都将发送到 Firebase 存储,然后从那里检索它们以显示在 ViewTwo 中。

在 ViewTwo 内部,还有 4 个 ImageView 出口接收图像 posted 从 ViewOne 到 Firebase 存储。

无论如何我都看不到使用 Firebase Storage 将多个图像存储在同一个路径下的 Storage 中。我了解如何将每个 post 的 1 张图像存储到存储然后访问它,但不能存储多张图像。

我如何post 将多个图像作为一个数组存储在存储中以保存在 1 个路径下 (ViewOne)?我该如何访问所有这些图像 (ViewTwo)?

顺便说一句,我通过 Youtube 从 Brian Voong 那里得到了很棒的 viewTwo 代码(自定义函数):https://youtu.be/b1vrjt7Nvb0

这是图像 url 字符串将进入的 class。我没有费心把 init.

class ImageData: NSObject{
var imageOneURL: String?
var imageTwoURL: String?
var imageThreeURL: String?
var imageFourURL: String?
}

这是imageViewOne。我没有添加 ImagePicker 委托,因为它似乎没有必要,但我知道如何使用它们。

import Firebase

ImageViewOne:UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate{

@IBOutlet weak var imageViewONE: UIImageView!
@IBOutlet weak var imageViewTWO: UIImageView!
@IBOutlet weak var imageViewTHREE: UIImageView!
@IBOutlet weak var imageViewFOUR: UIImageView!

var images = [ImageData]()

@IBAction func postButton(sender: UIButton){

//Unigue string for the images to be loaded under their own path
let uniqueImageIDPath = NSUUID().UUIDString

//Firebase Storage Ref
let storageRef = FIRStorage.storage().reference().child("images/\(uniqueImageIDPath)")

//Firebase Image to be stored. This is where I need help to store all the images at once.
if let myImages = UIImageJPEGRepresentation(self.imageViewONE.image!, 0.1){ 
    storageRef.putData(myImages, metadata: nil, completion: {

                        (metadata, error) in

                        if error != nil{
                            print(error?.localizedDescription)
                        }

    if let myImageString = metadata?.downloadURL()?.absoluteString{

        let imageData = ImageData()
        imageData.imageOne = myImageString
        self.images.apped(imageData)

        let values = ["imageOneURL": imageData.imageOne, "imageTwo":"?", "imageThree":"?", "imageFour":"?"]

        let ref = FIRDatabase.database().reference().child("users")
        ref.updateChildValues(values, withCompletionBlock: {

                (error, user) in

                if error != nil{
                    print(error?.localizedDescription)
                }
            })
        }
    }
}

这是viewTwo

import Firebase

ViewTwo: UIViewController{

@IBOutlet weak var imageViewONE: UIImageView!
@IBOutlet weak var imageViewTWO: UIImageView!
@IBOutlet weak var imageViewTHREE: UIImageView!
@IBOutlet weak var imageViewFOUR: UIImageView!

var imageOne: UIImage?
var imageTwo: UIImage?
var imageThree: UIImage?
var imageFour: UIImage?

override func viewWillAppear(animated: Bool) {
        super.viewWillAppear(animated)

    let ref = FIRDatabase.database().reference().child("users")

    ref.observeEventType(.ChildAdded, withBlock: {
            (snapshot) in

            if let dict = snapshot.value as? [String: AnyObject]{
            let imageURLStr = dict["imageOneURL"] as? String
            self.loadImageUsingCacheWithURLString(imageURLStr)
    }
}

//Custom Function
func loadImageUsingCacheWithURLString(urlString: String){

        let url = NSURL(string: urlString)

        NSURLSession.sharedSession().dataTaskWithURL(url!, completionHandler: {

            (data, response, error) in

            if error != nil {
                print(error?.localizedDescription)
                return
            }

            dispatch_async(dispatch_get_main_queue(), {

                if let displayImage = UIImage(data: data!){

                    self.imageOne = displayImage!
                    self.imageViewOne.image = self.imageOne
                }

            })

        }).resume()
    }
}

原来 Firebase 不允许您存储任何数组。在获得每个图像的元数据 url 后,您必须将每个图像单独保存在 FBDatabase 和 FBStorage 中。