我一直在拉我的头发从早上就试图下载从Amazon S3存储图像(WEBP图像),并对其进行缓存。无论我采取的方法,我击出了一些或其它路障。不同的方式我试图做到这一点,
所以,现在我只剩下一个选择,要么使用Amazon SDK下载图像,然后独立使用SDWebImage的SDImageCache缓存,或者我需要的SDWebImage源代码添加到我的项目,然后我需要修改它的源取授权报头。
请让我知道如果有什么更好的办法来实现这一目标,这将会是巨大的,如果我能在什么了一些指针来实现什么,我试图做的最好的方式。
提前致谢。
说实话,我看着这个自己很长一段时间,很不满意由AWS提供的缓存中建系统。相反,我选择了用翠鸟https://github.com/onevcat/Kingfisher,因为它是建立在快速和使用。我强烈推荐它,因为它是高度可定制的,但也完美的作品“开箱即用”
你可以选择哪些关键翠鸟使用的缓存。因此,创建一个presigned S3网址,然后加载图像使用S3键作为缓存而不是全presigned URL时。
let getPreSignedURLRequest = AWSS3GetPreSignedURLRequest()
getPreSignedURLRequest.bucket = media.bucket
getPreSignedURLRequest.key = media.key
getPreSignedURLRequest.httpMethod = .GET
getPreSignedURLRequest.expires = Date(timeIntervalSinceNow: 3600) // Change the value of the expires time interval as required
AWSS3PreSignedURLBuilder.default().getPreSignedURL(getPreSignedURLRequest).continueWith { (task:AWSTask<NSURL>) -> Any? in
if let error = task.error as NSError? {
print("Error: \(error)")
return nil
}
if let presignedURL = task.result {
DispatchQueue.main.async {
self.imageView.kf.indicatorType = .activity
let resource = ImageResource(downloadURL: URL(string: presignedURL.absoluteString!)!, cacheKey: media.key)
self.imageView.kf.setImage(with: resource)
}
}
return nil
}