图像不使用Firebase网址缓存,而是使用其他网址缓存

时间:2016-08-16 16:10:22

标签: swift caching firebase

我没什么问题。我使用以下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")

                })
            }
        })

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

编辑:Firebase小伙Mike McDonald的报价

  

“Github有一个Cache-Control:max-age = 300而Firebase存储   默认情况下没有设置缓存控件(您可以在设置时设置它)   上传文件,或通过更新元数据来更改它,所以我假设   这就是为什么KingFisher没有缓存它。“

KingFisher所有者quotes

2 个答案:

答案 0 :(得分:3)

就像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
}

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

enter image description here

答案 1 :(得分:0)

我获得缓存的方式是我必须将所有图像url-s写入JSON,如下所示:

.setValue(url!.absoluteString)

然后将其读作url-s