Изображение Firebase в хранилище переписывается и сохраняются только последние два - PullRequest
0 голосов
/ 23 января 2020

В моем проекте Firebase пользователь имеет возможность загрузить изображение, которое хранится в папке с именем images в Firebase Storage.

Однако, когда я тестирую его, загружая изображение, в папке отображаются только 2 самые последние загруженные мной изображения. Я хотел бы сохранить все загруженные изображения.

Кто-нибудь еще сталкивался с подобной проблемой? Я не знаю, заключается ли проблема в моем коде или в Firebase, но вот мой код:

import UIKit
import FirebaseStorage

class PostViewController: UIViewController,UINavigationControllerDelegate, UIImagePickerControllerDelegate {

    @IBOutlet weak var imageView: UIImageView!
    @IBOutlet weak var noteTextField: UITextField!
    var imagePicker = UIImagePickerController()
    var imageName = "\(NSUUID().uuidString).jpeg"
    var imageURL = ""


    override func viewDidLoad() {
        super.viewDidLoad()
        let tapGesture = UITapGestureRecognizer(target: view, action: #selector(UIView.endEditing))
        view.addGestureRecognizer(tapGesture)
        imagePicker.delegate = self

    }

    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
        if let selectedImage = info[UIImagePickerController.InfoKey.originalImage] as? UIImage {
            imageView.image = selectedImage

        }
        dismiss(animated:true, completion: nil)
    }




    @IBAction func cameraTapped(_ sender: Any) {
        imagePicker.sourceType = .camera
        present(imagePicker,animated: true, completion: nil)
    }

    @IBAction func choosePhotoTapped(_ sender: Any) {
        imagePicker.sourceType = .photoLibrary
        present(imagePicker,animated: true, completion: nil)
    }
    @IBAction func postTapped(_ sender: Any) {

        let imagesFolder = Storage.storage().reference().child("images")
        if let image = imageView.image{
            if let imageData : Data = image.jpegData(compressionQuality: 1){
                imagesFolder.child(imageName).putData(imageData, metadata: nil) { (metaData, error) in
                    if let error = error{
                        print(error)

                    }else{
                        imagesFolder.child(self.imageName).downloadURL { (url, error) in
                            if let imageURL = url?.absoluteString{
                                self.imageURL = imageURL
                                self.performSegue(withIdentifier: "successSegue", sender: nil)
                            }
                        }
                    }
                }
            }
        }
    }

}

Существует ли проблема в настройках Firebase?

1 Ответ

0 голосов
/ 24 января 2020

Одна проблема заключается в том, что при создании экземпляра PostViewController заполняется переменная imageName и каждый раз при нажатии на изображение для сохранения оно сохраняется с тем же именем. Имя изменится, если, например, приложение будет перезапущено, поскольку будет создан новый PostViewController, который создаст новое свойство imageName

. Исправление заключается в перемещении свойства imageName, чтобы оно создавалось при каждом нажатии пользователем

    class PostViewController: UIViewController,UINavigationControllerDelegate, UIImagePickerControllerDelegate {

        @IBOutlet weak var imageView: UIImageView!
        @IBOutlet weak var noteTextField: UITextField!
        var imagePicker = UIImagePickerController()
  |---      //var imageName = "\(NSUUID().uuidString).jpeg"  //move this
  |      var imageURL = ""
  |      .
  |      .
  |       @IBAction func postTapped(_ sender: Any) {
  |   
  |           let imagesFolder = Storage.storage().reference().child("images")
  |           if let image = imageView.image {
  |              if let imageData : Data = image.jpegData(compressionQuality: 1) {  
  |---->            let imageName = "\(NSUUID().uuidString).jpeg"  //to here  
                    imagesFolder.child(imageName).putData(imageData, metadata: nil) { (metaData, error) in
                        if let error = error{
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...