Firebase - 下载几个文件
Firebase - downloading few files
有没有办法使用 Firebase Storage SDK 下载几个文件(图像)并实时缓存这些文件,以便在下载图像后更新缓存?
我还可以在另一个视图控制器中观察此缓存是否正在更新吗?
我不需要完整的答案,可能只是提示在哪里学习它。我搜索了 firebase 文档,找到了一些信息,但我完全不知道如何使用它。
看看NSURLCache
。基本上你要做的是,每次你上传一个文件到 Firebase 存储,你可以得到一个下载 URL 并下载它,然后 storeCachedResponse:forRequest:
在 URL 缓存中。由于此缓存是共享的,您甚至可以跨活动获取它。
同样,在下载时,您需要通过 cachedResponseForRequest:
检查缓存的请求,如果不存在,则执行下载(此时您缓存请求以备后用)。
从长远来看,我们希望为您启用此行为,但现在,您可以使用 NSURLCache
来实现它:)
我还没有找到在 Firebase Storage SDK 中执行此操作的方法。这是我从 bhlvoong 教程中获取的一些代码,用于使用 NSCache
.
缓存图像
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()
}
}
有没有办法使用 Firebase Storage SDK 下载几个文件(图像)并实时缓存这些文件,以便在下载图像后更新缓存?
我还可以在另一个视图控制器中观察此缓存是否正在更新吗?
我不需要完整的答案,可能只是提示在哪里学习它。我搜索了 firebase 文档,找到了一些信息,但我完全不知道如何使用它。
看看NSURLCache
。基本上你要做的是,每次你上传一个文件到 Firebase 存储,你可以得到一个下载 URL 并下载它,然后 storeCachedResponse:forRequest:
在 URL 缓存中。由于此缓存是共享的,您甚至可以跨活动获取它。
同样,在下载时,您需要通过 cachedResponseForRequest:
检查缓存的请求,如果不存在,则执行下载(此时您缓存请求以备后用)。
从长远来看,我们希望为您启用此行为,但现在,您可以使用 NSURLCache
来实现它:)
我还没有找到在 Firebase Storage SDK 中执行此操作的方法。这是我从 bhlvoong 教程中获取的一些代码,用于使用 NSCache
.
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()
}
}