Загрузка изображения в хранилище Firebase - PullRequest
1 голос
/ 10 марта 2020

Я использовал руководства по firebase для загрузки изображения пользователя в хранилище firebase, но после загрузки изображения пользователя в папке ничего не появляется. Как мне решить эту проблему, чтобы успешно загрузить мое изображение в хранилище Firebase?

Размер 0 байтов

let storage = Storage.storage()
        let storageRef = storage.reference()
         let image = UIImage(named: "ProfileImage")
       let data = Data()
         let starsRef = storageRef.child("ProfileImage.jpeg")
        let metadata = StorageMetadata()
        metadata.contentType = "ProfileImage/jpeg"
        let uploadTask = starsRef.putData(data, metadata: nil) { (metadata, error) in
         guard let metadata = metadata else {
           return
         }

         let size = metadata.size

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

             return
           }
         }
       }

Ответы [ 3 ]

0 голосов
/ 10 марта 2020
  1. contentType должно быть image/jpeg. Я гуглил некоторые коды штук , он показывает ту же концепцию.
  2. О contentType, подробнее на этой вики-ссылке .
  3. Если вы загрузите изображение в формате jpeg, затем вы должны загрузить jpeg двоичный файл. Но data = image.pngData(), похоже, это двоичные данные png.

// data is `png` binary
let data = image.pngData()
// imageData is `jpeg` binary 
let imageData = image.jpegData(compressionQuality: 0.9)
let uiImage: UIImage = UIImage(data: imageData!)!

 let starsRef = storageRef.child("ProfileImage.jpg")
let metadata = StorageMetadata()

// About contentType
// See it: https://en.wikipedia.org/?title=Content_type&redirect=no 
metadata.contentType = "ProfileImage/jpeg"

// data is `png` binary, but contentType is `jpeg` ? 
let uploadTask = starsRef.putData(data!, metadata: nil) { (metadata, error) in
 guard let metadata = metadata else {
   return
 }
0 голосов
/ 10 марта 2020

Вот 6 шагов по загрузке изображения в Firebase Storage и извлечению пути URL для последующего использования.

  1. Создание уникального имени с помощью UUID().uuidString
  2. Сжатие изображение в compressionQuality
  3. Sat метаданные как .jpeg
  4. Добавить данные в Firebase Storage
  5. Если получилось, получить URL-адрес изображения
  6. Преобразуйте URL-адрес в url?.absoluteString и распечатайте его, используя print

        //1. Create an unique name for your image
        let imageName = UUID().uuidString
        let imageReference = Storage.storage().reference().child(imageName)
    
        //2. Compress quality
        if let uploadData = self.tempImageView.image!.jpegData(compressionQuality: 0.5){
    
            //3. Save image as .jpeg
            let metaDataForImage = StorageMetadata()
            metaDataForImage.contentType = "image/jpeg"
    
            //4. Add the data to Firebase Storage
            imageReference.putData(uploadData, metadata: metaDataForImage) { (meta, err) in
                if let err = err{
                    print(err.localizedDescription)
                }
                else{
                    //5. Retrieving the image URL
                    imageReference.downloadURL { (url, err) in
                        if let err = err{
                            print(err.localizedDescription)
                        }
                        else{
                            //6. Print the complete URL as string
                            let urlString = url?.absoluteString
                            print(urlString)
                        }
                    }
                }
            }
        }
    
0 голосов
/ 10 марта 2020

Сделайте это let data a guard let data, таким образом вам не придется принудительно разворачивать, когда вам нужно, чтобы это было необязательным. Я бы сказал, что в целом избегайте распаковки силой.

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