如何下载Firebase存储文件

时间:2020-02-05 04:56:56

标签: ios swift firebase firebase-storage

截至目前,我正在使用资源文件夹中当前使用的图像,这肯定会造成内存/应用大小问题。

我将照片上传到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


    }

我阅读了Firebase存储文档并尝试了一些练习代码

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 个答案:

答案 0 :(得分:2)

使用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方法------------

//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, "")
                }
            })
        }
    }

在此功能“ uploadImageToFirebaseStorage”中,您获得了Firebase上传内容的链接,并且在该链接的帮助下,您可以访问上传的内容。

将获得链接的函数的一部分(您可以将该URL保存到数据库中以供参考):

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

希望有帮助!


如果您手动上传了图像,则可以通过单击该特定内容来获取URL。在右侧,将出现一个窗口,您可以在其中获取资源的链接。