Firebase - 下载几个文件

时间:2016-05-28 23:25:24

标签: ios swift firebase firebase-storage

有没有办法使用Firebase Storage SDK下载几个文件(图像)并对这些文件进行实时缓存,因此在下载图像后,缓存会更新?

我是否可以在另一个视图控制器中观察此缓存是否正在更新?

我不需要一个完整的答案,只是可能暗示在哪里学习它。我搜索了firebase文档,找到了一些信息,但我完全不知道如何使用它。

2 个答案:

答案 0 :(得分:3)

看看NSURLCache。基本上,您每次将文件上传到Firebase存储时,都可以获得下载URL并下载,然后在URL缓存中storeCachedResponse:forRequest:。由于此缓存是共享的,您甚至可以跨活动获取它。

同样,在下载时,您需要通过cachedResponseForRequest:检查缓存的请求,如果它不存在,请执行下载(此时您将请求缓存以供日后使用)。

从长远来看,我们希望能够为您提供开箱即用的此功能,但就目前而言,您可以使用NSURLCache来实现这一目标:)

答案 1 :(得分:0)

我仍然无法在Firebase Storage SDK中找到解决方法。下面是一些代码我使用NSCache bhlvoong教程来缓存图像。

import UIKit

let imageCache = NSCache<AnyObject, AnyObject>()

extension UIImageView {

    func loadImageUsingCacheWithUrlString(urlString: String) {

        self.image = nil

        //check cache for image first
        if let cachedImage = imageCache.object(forKey: urlString as NSString) as? UIImage {
            self.image = cachedImage

            return
        }

        //otherwise fire off a new download
        let url = NSURL(string: urlString)
        URLSession.shared.dataTask(with: url as! URL, completionHandler: { (data, response, error) in

            //download hit an error so lets return out
            if error != nil {
                print(error)

                return
            }

            DispatchQueue.main.async {
                if let downloadedImage = UIImage(data: data!) {
                    imageCache.setObject(downloadedImage, forKey: urlString as NSString)

                    self.image = downloadedImage
                }
            }


        }).resume()
    }


}