Загрузить изображение из галереи в Firebase с помощью Swift 4.2 - PullRequest
0 голосов
/ 20 ноября 2018

У меня проблема с Firebase и загрузкой картинок ..

Я пытался следовать документации Firebase, но я не вправе делать правильные вещи ...

В моем приложении я хочу отправить в firebase значение 2 текстовых полей и 1 сегментированного элемента управления плюс одно изображение, которое поступает из галереи iphone.

хорошо, моя кнопка сохранения:

@IBAction func saveBtnWasPressed(_ sender: Any) {

    //Informations from the segmented control
    if isMe == false {// Si SE
        acftType = "SE"
    }else if isMe == true {//Si ME
        acftType = "ME"
    }

    let ref = Database.database().reference()
    let userID = Auth.auth().currentUser?.uid
    let usersPlanes : NSDictionary = [ "Registration" : self.acftRegTxtField.text!,
                                       "model": self.acftModelTxtField.text!,
                                       "Type" : self.acftType]

    if isMe == false {// Si SE
        ref.child("Planes").child(userID!).child("SE").childByAutoId().setValue(usersPlanes)
    }else if isMe == true {//Si ME
         ref.child("Planes").child(userID!).child("ME").childByAutoId().setValue(usersPlanes)
    }else{

        print("Error: Impossible to find the type of aircraft...")
    }



    let Dpalert = UIAlertController(title: nil, message: "Your informations as been upload", preferredStyle: .alert)

    Dpalert.addAction(UIAlertAction(title: "Roger", style: .cancel, handler: nil))

    self.present(Dpalert, animated: true)
}

И моя функция, позволяющая пользователю выбирать изображение из его галереи:

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

    let userID = Auth.auth().currentUser?.uid

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

    if let selectedImage = info[UIImagePickerController.InfoKey.editedImage] as? UIImage {
        self.planImageView.image = selectedImage
        var data = Data()
        data = selectedImage.jpegData(compressionQuality: 0.75)!

    }else{
        print("Error : Impossible to deal with this image...")
    }
    let imageRef = Storage.storage().reference().child("Images").child(userID!).child(randomString(20));

    let uploadPict = imageRef.putData(data, metadata: nil){ (metadata, error) in
        guard let metadata = metadata else {
            return
        }

        let size = metadata.size

        imageRef.downloadURL { (url, error) in
            guard let downloadURL = url else {

                return
            }
        }
    }

Но в базе данных ничего не появляется, когдаизображение загружается в приложение, и как я могу добавить его в ту же папку, что и мои первые 3 информации, отправленные с помощью кнопки сохранения?

Я полностью потерян со всей этой информацией.Как я могу решить мою проблему?

Большое спасибо за вашу помощь!

Флаер-74

1 Ответ

0 голосов
/ 23 ноября 2018

В этой функции

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

let userID = Auth.auth().currentUser?.uid

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

if let selectedImage = info[UIImagePickerController.InfoKey.editedImage] as? UIImage {
    self.planImageView.image = selectedImage
    var data = Data()
    data = selectedImage.jpegData(compressionQuality: 0.75)!

}else{
    print("Error : Impossible to deal with this image...")
}
let imageRef = Storage.storage().reference().child("Images").child(userID!).child(randomString(20));

let uploadPict = imageRef.putData(data, metadata: nil){ (metadata, error) in
    guard let metadata = metadata else {
        return
    }

    let size = metadata.size

    imageRef.downloadURL { (url, error) in
        guard let downloadURL = url else {

            return
        }
    }
}

Попытайтесь поставить вывод, когда ваша ошибка putData

    let uploadPict = imageRef.putData(data, metadata: nil){ (metadata, error) in
    guard let metadata = metadata else {
        print("Error with upload \(String(describing: error?.localizedDescription))")
        return
    }

    let size = metadata.size

    imageRef.downloadURL { (url, error) in
        guard let downloadURL = url else {
            print("Error with download URL: \(String(describing: error?.localizedDescription))")
            return
        }
    }

Возможно, это поможет вам распознать ошибку;скажите мне, что вы получили в ошибке

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...