ios - 使用 SDWebImage 忽略查询参数

标签 ios caching amazon-s3 sdwebimage

我正在使用 SDWebImage 在我的应用程序中缓存图像,但是我最近遇到了一个问题,即应该被缓存的图像不断刷新。仔细研究后,我发现来自 AWS 的完整图像 url 实际上正在发生变化,这是因为附加在 url 末尾的参数。每次我获取包含图像 url 的对象时,图像 url 都会返回动态“签名”和“过期”参数(出于安全目的)。就图像缓存而言,这是一个不同的 url,但请注意图像的相同路径。

第一次获取:

https://myapp.s3.amazonaws.com/path/image123.jpeg?AWSAccessKeyId=SOMEKEY&Signature=vrUFlMFEQ9fqQ%3D&Expires=1441702633

1 秒后再次获取:

https://myapp.s3.amazonaws.com/path/image123.jpeg?AWSAccessKeyId=SOMEKEY&Signature=2mcMxUJLyJd7E%3D&Expires=1441703105

处理这种情况的最佳方法是什么?如果 SDWebImage 可以选择忽略文件路径之外的查询参数,那当然会很棒。

最佳答案

SDWebImage 有一个允许使用自定义键的方法,这在这种情况下很有用,因为 AWS 每次调用时都会更改查询。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary    *)launchOptions
{
    SDWebImageManager.sharedManager.cacheKeyFilter = ^(NSURL *url) {
        url = [[NSURL alloc] initWithScheme:url.scheme host:url.host path:url.path];
        return [url absoluteString];
    };

    // Your app init code...
    return YES;
}

更多阅读:SDWebImage | Using the cache key filter

关于ios - 使用 SDWebImage 忽略查询参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25721048/

相关文章:

javascript - 如何从 AWS CloudFront 和 S3 请求 gzip javascript 文件

ios - 列表不异步更新列表中的行数?

ios - 对于 MVVM 设计模式, TableView 单元格高度属于哪里?

cocoa-touch - UINavigationController:将通用填充/边距应用于所有弹出 View Controller 的 View

Android Webview - 完全清除缓存

java - 如何等待主线程直到AWS S3文件上传完成

ios - 通过 Interface Builder 创建的 UIView 在 vi​​ewDidLoad 中没有 subview

caching - Redis SET UNION 操作中的键数是否有限制?

php - 清除另一个应用程序的 Symfony 缓存

linux - AWS CLI S3 CP --递归函数在控制台中有效,但在 .sh 文件中无效