Как одновременно загрузить аудиозапись и изображение в хранилище Firebase

#ios #swift #firebase #firebase-realtime-database #firebase-storage

#iOS #swift #firebase #firebase-база данных в реальном времени #firebase-хранилище

Вопрос:

Я пытаюсь разрешить пользователю загружать изображение вместе со своей аудиозаписью. Согласно документации Firebase, я вложил ссылку на базу данных внутрь ссылки на хранилище, чтобы загрузить их, но я не могу создать и отправить URL-адреса как для изображения, так и для аудио. Я мог бы отправить их отдельно в виде двух разных ссылок на базу данных, но это вызвало бы проблемы при загрузке их обратно в приложение (без какого-либо идентификатора, связывающего изображение и аудио). Если кто-нибудь знает, как отправить две ссылки как одну, мы ценим вашу помощь.

 func uploadRecording () {
    if let audioRecording = recordedAudioURL {
        let audioIDString = NSUUID().uuidString
        let audioStorageRef = Storage.storage().reference(forURL: Config.STORAGE_ROOT_REFERENCE).child("posts").child(audioIDString)

        audioStorageRef.putFile(from: audioRecording, metadata: nil, completion: {(_ , error: Error?) in
            if error != nil {
                print (error)
                return
            }
            audioStorageRef.downloadURL(completion: { (url: URL?, error: Error?) in
                if let audioDownloadURL = url?.absoluteString {
                    if error != nil {
                        print(error)
                        return
                    }
                   sendDatatoDatabase(recordedAudioURL: audioDownloadURL)
                }
            })
        })
    }
    // upload selected image to Firebase
    func uploadImage () {
        if let lessonImg = self.selectedImage, let imageData = lessonImg.jpegData(compressionQuality: 0.1) {
            let photoIDString = NSUUID().uuidString
            let photoStorageRef = Storage.storage().reference(forURL: Config.STORAGE_ROOT_REFERENCE).child("posts").child(photoIDString)

            photoStorageRef.putData(imageData, metadata: nil, completion: {(_ , error: Error?) in
                if error != nil {
                    print(error)
                    return
                }
                photoStorageRef.downloadURL(completion: { (url: URL?, error: Error?) in
                    if let photoDownloadURL = url?.absoluteString {
                        if error != nil {
                            print(error)
                            return
                        }
                    }
                })
            }
        )}
    }
  

Для newPostReference я получаю сообщение об ошибке: использование неразрешенного идентификатора ‘photoDownloadURL’

 func sendDatatoDatabase (recordedAudioURL: String) {
        let ref = Database.database().reference()
        let postsReference = ref.child("posts")
        let newPostID = postsReference.childByAutoId().key
        let newPostReference = postsReference.child(newPostID!)
        newPostReference.setValue(["recordingURL": recordedAudioURL, "photoURL": photoDownloadURL, "lessonTitle": lessonTitleTextField.text!, "lessonTopic": lessonTopicTextField.text!, "lessonLocation": lessonlocationTextField.text!])
        self.lessonlocationTextField.text = " "
        self.lessonTopicTextField.text = " "
        self.lessonTitleTextField.text = " "
        self.tabBarController?.selectedIndex = 1
    }
  

Комментарии:

1. Вопрос немного неясен, и я не уверен, что означает беспорядочный процесс загрузки . Можете ли вы уточнить? И пока вы этим занимаетесь, неплохо бы включить код и структуры в виде текста, а не ссылок и изображений. Пожалуйста, скопируйте и вставьте фрагмент вашего кода. Смотрите, изображения и ссылки — зло

2. Проблема все еще немного неясна. С загрузкой аудио и изображения проблем не возникнет; «связывание» их не требуется. Вы могли бы создать структуру под названием struct UserAudioAndImage с двумя свойствами вар userAudio и вар UserImage , или они могли бы заполнить класс или даже (не рекомендуется) сохранить их в двух отдельных массивах. Если вы загружаете аудио и изображение текущего пользователя, у вас есть только два класса vars для хранения этих данных. Возможно, вы могли бы уточнить, в чем сложность загрузки двух фрагментов данных и заполнения двух переменных из этих данных? Может быть, вариант использования поможет?