Выгрузка фото Firebase

swift
ios

#1

Добрый день! У меня есть приложение, в котором я выбираю фото и выгружаю его в Storage Firebase. В интернете нашел видео - https://www.youtube.com/watch?v=gWZP0vDgMtg&t=248s

Вот код -

 func uploadProfileImage(_ image:UIImage, completion: @escaping ((_ url:URL?)->())) {
        guard let uid = Auth.auth().currentUser?.uid else { return }
        let storageRef = Storage.storage().reference().child("user/\(uid)")
        
        guard let imageData = UIImageJPEGRepresentation(image, 0.75) else { return }
        
        
        let metaData = StorageMetadata()
        metaData.contentType = "image/jpg"
        
        storageRef.putData(imageData, metadata: metaData) { metaData, error in
            if error == nil, metaData != nil {
                if let url = metaData?.downloadURL() {
                    completion(url)
                } else {
                    completion(nil)
                }
                // success!
            } else {
                // failed
                completion(nil)
            }
        }
    }

При компиляции выдает ошибку - Value of type ‘StorageMetadata’ has no member ‘downloadURL’

В Firebase 5.0 удалили этот метод.

Теперь не знаю как быть.
Помогите, пожалуйста. Заранее, огромное спасибо!


#2

#3

Взял со stackoverflow:

/ Data in memory
let data = Data()

// Create a reference to the file you want to upload
let riversRef = storageRef.child("images/rivers.jpg")

// Upload the file to the path "images/rivers.jpg"
let uploadTask = riversRef.putData(data, metadata: nil) { (metadata, error) in
  guard let metadata = metadata else {
    // Uh-oh, an error occurred!
    return
  }
  // Metadata contains file metadata such as size, content-type.
  let size = metadata.size
  // You can also access to download URL after upload.
  storageRef.downloadURL { (url, error) in
    guard let downloadURL = url else {
      // Uh-oh, an error occurred!
      return
    }
  }
}

#4

Окей, спасибо! Чуть позже займусь решением данной проблемы. Пока что просто скинул версию Firebase до 4.0 :slight_smile:


#6

Мне этот способ помог


#7

Подскажите, а куда и как именно использовать ваш код в примере кода SooqaEffect (в самом вопросе)? Спасибо


#8

К примеру, пользователю необходимо добавить в свой профиль аватар. Он выбирает и срабатывает этот метод. В Firebase Storage у меня сохраняется в папку “user” + ID пользователя(генерируется автоматически)


#9

То есть прямо этот код работает, что указан в заголовке темы (и аватар добавляется и ID), или вы его доработали, если доработали, то можете поделиться. Спасибо


#10

Пока не дорабатывал. Этот метод работает только на Firebase/Storage 4.0.

А так, вот ответ по выгрузке с новой версии.


#11

Может у кого-нибудь есть реализованный код под Firebase 5.0 как загрузить в Firebase Storage в уже зарегистрированный профайл пользователя картинку (аватар). Буду признателен, а тот совсем запутался в реализации данного функционала по новым правилам.


#12

Там же дали полный рабочий пример.


#13

Учись пользоваться гуглом, иначе далеко не уйдешь в программировании)
Алгоритм действий таков:
К примеру, ты выбрал через UIimagePicker фотку и она появилась в UIImageView. В моем случае, я нажимаю на «Сохранить» и срабатывает метод, который выгружает данные в Firebase Storage и в это же время сохраняет url фотографии в Database, в ветку userId. Из базы уже я и читаю url, фамилию, имя и тд.

Мне было надо именно так. Читай тот ответ из stackoverflow. Там ответ


#14

Спасибо) буду разбираться. Дня 3 уже бьюсь