我试图从Amazon S3存储桶下载图像(webp图像)并将其缓存,从早上开始拔我的头发。无论采取什么方法,我都遇到了一些或其他路障。我试图实现这一目标的方式不同,
所以现在我可以选择使用Amazon SDK下载图像,然后使用SDWebImage的SDImageCache独立缓存它,或者我需要将SDWebImage源代码添加到我的项目中然后我需要修改它的来源以获取授权标头。
请告诉我是否有更好的方法来实现这一点,如果我能指出什么是实现我想做的最好的方法,那就太棒了。
提前致谢。
答案 0 :(得分:0)
说实话,我自己研究了很长时间,并且对AWS提供的内置缓存系统不满意。相反,我选择使用Kingfisher lein-flyway因为它是快速构建并且使用得很好。我强烈推荐它,因为它是高度可定制的,但也可以完美地工作"开箱即用"
答案 1 :(得分:0)
您可以选择翠鸟用于缓存的密钥。因此,创建一个预签名的s3 url,然后在加载图像时使用s3键作为缓存,而不是完整的预签名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
}