Как отправить несколько изображений в Firebase и получить их в UIImageView в Swift - PullRequest
0 голосов
/ 02 мая 2020

У меня есть приложение, которое позволяет пользователям выбирать несколько изображений. Проблема в том, что он не загружает и не сохраняет изображение для пользователя в Firebase и не извлекает изображение.

Это мой код:

import UIKit

import Фотографии import Firebase import BSImagePicker

class Downloadimages: UIViewController {

@IBOutlet weak var imgView: UIImageView!

var ref: DatabaseReference?
var SelectedAssets = [PHAsset]()
var PhotoArray = [UIImage]()

override func viewDidLoad() {
    super.viewDidLoad()

    ref = Database.database().reference()
    // Do any additional setup after loading the view, typically from a nib.
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}



@IBAction func addImagesClicked(_ sender: Any) {




    // create an instance
    let vc = BSImagePickerViewController()

    //display picture gallery
    self.bs_presentImagePickerController(vc, animated: true,
                                         select: { (asset: PHAsset) -> Void in

    }, deselect: { (asset: PHAsset) -> Void in
        // User deselected an assets.

    }, cancel: { (assets: [PHAsset]) -> Void in
        // User cancelled. And this where the assets currently selected.
    }, finish: { (assets: [PHAsset]) -> Void in
        // User finished with these assets
        for i in 0..<assets.count
        {
            self.SelectedAssets.append(assets[i])

        }

        self.convertAssetToImages()

    }, completion: nil)

    let image = UIImagePickerController()
           image.delegate = self as? UIImagePickerControllerDelegate & UINavigationControllerDelegate
               image.sourceType = UIImagePickerControllerSourceType.photoLibrary

               image.allowsEditing = false

               self.present(image, animated: true)
               {
                   //after its completed
               }
           }


           @objc(imagePickerController:didFinishPickingMediaWithInfo:) func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any])
           {
               if let image = info[UIImagePickerControllerOriginalImage] as? UIImage
               {
                   imgView.image = image

               }
               else
               {
                   //error
               }

               self.dismiss(animated: true, completion: nil)

               let storageRef = Storage.storage().reference().child("myImage.png")
               if let uploadData = UIImagePNGRepresentation(self.imgView.image!){
                   storageRef.putData(uploadData, metadata: nil, completion:
                       {
                           (metadata, error) in
                           if error != nil {
                               print("error")
                               return
                           }

                           print(metadata!)

              //how do I put the download URL in the metadata into my database

                   }
                   )
               }

           }





func convertAssetToImages() -> Void {

    if SelectedAssets.count != 0{


        for i in 0..<SelectedAssets.count{

            let manager = PHImageManager.default()
            let option = PHImageRequestOptions()
            var thumbnail = UIImage()
            option.isSynchronous = true


            manager.requestImage(for: SelectedAssets[i], targetSize: CGSize(width: 200, height: 200), contentMode: .aspectFill, options: option, resultHandler: {(result, info)->Void in
                thumbnail = result!

            })

            let data = UIImageJPEGRepresentation(thumbnail, 0.7)
            let newImage = UIImage(data: data!)


            self.PhotoArray.append(newImage! as UIImage)

        }

        self.imgView.animationImages = self.PhotoArray
        self.imgView.animationDuration = 3.0
        self.imgView.startAnimating()

    }


    print("complete photo array \(self.PhotoArray)")
}

} и это мой почтовый индекс

import Foundation

class Post {var id: String var author: UserProfile var text: String var createAt: Date

init(id:String, author:UserProfile,text:String,timestamp:Double) {
    self.id = id
    self.author = author
    self.text = text
    self.createdAt = Date(timeIntervalSince1970: timestamp / 1000)
}

static func parse(_ key:String, _ data:[String:Any]) -> Post? {

    if let author = data["author"] as? [String:Any],
        let uid = author["uid"] as? String,
        let username = author["username"] as? String,
        let photoURL = author["photoURL"] as? String,
        let url = URL(string:photoURL),
        let text = data["text"] as? String,
        let timestamp = data["timestamp"] as? Double {

        let userProfile = UserProfile(uid: uid, username: username, photoURL: url)
        return Post(id: key, author: userProfile, text: text, timestamp:timestamp)

    }

    return nil
}

} это мой userProfile

import Foundation

class UserProfile {var uid: String var username: String var photoURL : URL

init(uid:String, username:String,photoURL:URL) {
    self.uid = uid
    self.username = username
    self.photoURL = photoURL
}

}

и это

import Foundation

import Firebase

class UserService {

static var currentUserProfile:UserProfile?

static func observeUserProfile(_ uid:String, completion: @escaping ((_ userProfile:UserProfile?)->())) {
    let userRef = Database.database().reference().child("users/profile/\(uid)")

    userRef.observe(.value, with: { snapshot in
        var userProfile:UserProfile?

        if let dict = snapshot.value as? [String:Any],
            let username = dict["username"] as? String,
            let photoURL = dict["photoURL"] as? String,
            let url = URL(string:photoURL) {

            userProfile = UserProfile(uid: snapshot.key, username: username, photoURL: url)
        }

        completion(userProfile)
    })
}

}

...