【问题标题】:Images not caching with Firebase url but caching with other图片不使用 Firebase url 缓存,而是使用其他缓存
【发布时间】:2017-01-19 18:50:42
【问题描述】:

我有一点问题。我得到了缓存以使用以下URL:

let URL = NSURL(string: "https://raw.githubusercontent.com/onevcat/Kingfisher/master/images/kingfisher-\(indexPath.row + 1).jpg")!

但是不能让它像这样使用URL:

FIRStorage.storage().reference().child("\(productImageref!).png").downloadURLWithCompletion({(url, error)in

            if error != nil{
                print(error)
                return
            }else{

                cell.snusProductImageView.kf_setImageWithURL(url , placeholderImage: nil,
                    optionsInfo: [.Transition(ImageTransition.Fade(1))],
                    progressBlock: { receivedSize, totalSize in
                        print("\(indexPath.row + 1): \(receivedSize)/\(totalSize)")
                    },
                    completionHandler: { image, error, cacheType, imageURL in
                        print("\(indexPath.row + 1): Finished")

                })
            }
        })

我在这里做错了什么?你能指出我正确的方向吗?对于缓存,我使用 3rd 方库“KingFisher”

编辑:Firebase 人 Mike McDonald 的名言

“Github 有 Cache-Control: max-age=300 而 Firebase 存储 默认没有设置缓存控制(你可以在你设置 上传文件,或通过更新元数据来更改它),所以我假设 这就是 KingFisher 不缓存它的原因。”

KingFisher 所有者quotes。

【问题讨论】:

    标签: swift caching firebase


    【解决方案1】:

    就像 Firebase 的家伙 Mike McDonald 所说,我在将图像上传到 Firebase 存储时直接设置了缓存控制。以后加载的时候会正确缓存。

    (配置:Swift3,Firebase 存储 3.11.0)

    let storage = FIRStorage.storage()
    
    let storageRef = storage.reference(forURL: yourFirebaseStorageReferenceURL)
    
    let imageRef = storageRef.child("profileImages/\(imageUUID).jpg")
    
    let metadata = FIRStorageMetadata()
    metadata.contentType = "image/jpeg"
    
    // THIS is the important part
    metadata.cacheControl = "public,max-age=2592000"
    
    let uploadTask = imageRef.put(imageData, metadata: metadata) { (metadata, error) in
       if let error = error
       {
            completion(.failure(error as NSError))
       }
    
       guard let metadata = metadata, let downloadURL = metadata.downloadURL()?.absoluteString else {
            // Handle upload error
            return
       }
    
       // Handle successful upload
    }
    

    当我下载图像时,缓存控制已设置

    【讨论】:

      【解决方案2】:

      我让它们缓存的方法是我必须像这样将所有图像url-s 写入JSON:

      .setValue(url!.absoluteString)
      

      然后将它们读作url-s

      【讨论】:

        猜你喜欢
        • 2017-03-25
        • 2016-07-21
        • 2014-01-23
        • 2012-10-01
        • 2021-08-30
        • 2011-11-15
        • 2019-12-23
        • 2014-09-23
        • 2023-04-10
        相关资源
        最近更新 更多