Firebase Storage 的 getMetaData() 是否调用后端(从而引入一个小延迟)?



我目前使用以下(Swift 4(代码下载存储在Firebase存储中的图像:

func getImage(completion: @escaping (UIImage?)->()) {
    let ref = Storage.storage().reference().child("myImage.jpg")
    ref.getMetadata() {
        (metadata, error) in
        guard let url = metadata?.downloadURLs?.first, error == nil else {
            print(String(describing: error))
            completion(nil)
            return
        }
        //got url download image here and return it
        //this function is not important but it does it asynchroniously
        func downloadImageOrReturnACachedVersionOfItBy(url, completion)
    }

我注意到下载图像时有相当大的延迟,即使downloadImageOrReturnACachedVersionOfItBy(...)实际上负责图像兑现

问题:

  1. 函数是否getMetadata()每次调用时联系后端?因此,这会引入往返 Web 服务呼叫延迟吗?

  2. 㞖。。。为避免这种情况,最好将返回的网址存储在上传图片时、从 Firebase 返回的元数据中putData()存储在应用中本地?这些下载网址是终身固定的吗?是否以某种方式自动失效?

1( 函数 getMetadata(( 是否每次联系后端 叫?因此,这可以引入往返Web服务调用吗? 延迟?

是的,这是因为下载 URL 可能已更改(例如,开发人员撤销了它(,因此我们需要再次获取它。

请注意,我们有一个 downloadURL(( 方法可以执行相同的操作,但无需手动解析元数据。

2( 如果是这样...为避免这种情况,最好将返回的存储存储 上传图像时,URL 在元数据中返回 Firebase putData(( 本地在应用程序中?这些下载网址是固定的吗 一辈子?是否以某种方式自动失效?

我建议使用FirebaseUI与SDWebImage的集成,它会自动缓存和显示这些图像。

// Reference to an image file in Firebase Storage
let reference = storageRef.child("images/stars.jpg")
// UIImageView in your ViewController
let imageView: UIImageView = self.imageView
// Placeholder image
let placeholderImage = UIImage(named: "placeholder.jpg")
// Load the image using SDWebImage
imageView.sd_setImage(with: reference, placeholderImage: placeholderImage)

最新更新