我没什么问题。我使用以下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。
答案 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
}
下载图像时,设置缓存控制
答案 1 :(得分:0)
我获得缓存的方式是我必须将所有图像url-s
写入JSON
,如下所示:
.setValue(url!.absoluteString)
然后将其读作url-s