Как скачать файлы хранилища Firebase - PullRequest
1 голос
/ 05 февраля 2020

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

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

Вот мой текущий код


// Trend Model

enum Gender { case male, female }

struct Trend {
    var name: String
    var details: String
    var image: UIImage?
    var gender : Gender
    var childValue: String
}

// Create trend
let femaleTrends = [

Trend(name: "Animal Prints", details: "Details will go here!", image: UIImage(named: "AnimalPrintW"), gender: .female, childValue: "animalprints"),

Trend(name: "Green", details: "Details will go here",image: UIImage(named: "Green"),gender: .female, childValue: "green")
]

 let maleTrends = [

Trend(name: "Animal Prints", details: "Details will go here!",image:UIImage(named: "AnimalPrintM"),gender: .male , childValue: "animalprints"),

....

]

Вот еще один контроллер представления, который содержит представление коллекции, отображающее список трендов

//Display the current trend image place holder and labels
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "homeViewCell", for: indexPath) as! CurrentTrendsCell

        switch selectedSegmentIndex {
        case 0: cell.trendsLabel.text = femaleTrends[indexPath.row].name
        cell.trendsImageView.image = femaleTrends[indexPath.row].image


        case 1: cell.trendsLabel.text = maleTrends[indexPath.row].name
        cell.trendsImageView.image = maleTrends[indexPath.row].image

        default: break

        }
        return cell


    }

Я прочитал в хранилище файловой базы do c и попробовал некоторый тренировочный код

let animalPrintRef = STORAGE_FEMALETREND_IMAGES_REF.child("AnimalPrints.jpeg").getData(maxSize: 1) { (data, error) in
      if let error = error {
            // Uh-oh, an error occurred!
          } else {
            // AnimalPrints.jpeg" is returned

             // This is the image I need
             let image = UIImage(data: data!)

          }
}

Я понимаю, но не уверен, как получить данные изображения для каждого trend и внедрить его в image в Trend

1 Ответ

2 голосов
/ 05 февраля 2020

Используйте хранилище Firebase для сохранения изображений и поместите ссылку на изображение в вашу базу данных.

typealias blockCompletedWith = (Bool, String) -> Void

func uploadProfileImage(_ image: UIImage) {
        let imageData = image.jpegData(compressionQuality: 1.0)
        let path = "folderName/imagename.jpeg"
        self.uploadImageToFirebaseStorage(data: imageData!, path: path, blockCompletedWith: { (isSuccess, urlStr) in
            Utility.stopActivityIndicator()
            DispatchQueue.main.async {
                if isSuccess {
                    print(urlStr)
                }
                else {
                    print("Error in uploading Image")
                }
            }
        })
    }

----------- uploadImageToFirebaseStorage Method ------------

//path: folder name if any followed by name of image
func uploadImageToFirebaseStorage(data: Data, path: String, blockCompletedWith: @escaping blockCompletedWith) {
        let metadata = StorageMetadata()
        metadata.contentType = "image/jpeg"

        let store = Storage.storage()
        let storeRef = store.reference().child(path)
        let _ = storeRef.putData(data, metadata: metadata) { (metadata, error) in
            guard let _ = metadata else {
                print("error occured: \(error.debugDescription)")
                blockCompletedWith(false, "")
                return
            }

            storeRef.downloadURL(completion: { (url, error) in
                if let urlText = url?.absoluteString {
                    blockCompletedWith(true, urlText)
                }
                else {
                    blockCompletedWith(false, "")
                }
            })
        }
    }

В этом веселье c " uploadImageToFirebaseStorage "вы получаете ссылку на загруженный контент Firebase и с помощью ссылки вы можете получить доступ к загруженному контенту.

Часть функции, где вы получите ссылку (вы можете сохранить этот URL в вашей базе данных для справки):

storeRef.downloadURL(completion: { (url, error) in
                if let urlText = url?.absoluteString {
                    blockCompletedWith(true, urlText)
                }
                else {
                    blockCompletedWith(false, "")
                }
            })

Надеюсь, что поможет!


Если вы загрузили изображения вручную, вы можете получить URL-адрес, нажав на этот конкретный контент ... справа появится окно, где вы можете получить ссылку для вашего ресурса.

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