ios - AFNetworking 3.0 GET/POST 设置可接受的内容类型并清除图像缓存

标签 ios image caching video afnetworking-3

我在我的项目中使用 AFNetworking 作为网络层。 对于图像,我遇到了一些与缓存相关的问题,我将框架更新到了 3.0 版本。

在更新过程中,我在获取媒体内容(图像和视频)的请求方面遇到了一些问题。

这是我的课:

+ (void)requestWithMethod:(NSString*)methodTypeValue path:(NSString*)pathValue parameters:(NSDictionary *)params token:(NSString*)token debug:(BOOL)debug completionHandler:(void (^)(id result, NSError *error))block {
    if(debug){
        NSLog(@"Method Type  = %@ \n",methodTypeValue);
        NSLog(@"Link = %@ \n",pathValue);
        NSLog(@"Token = %@", token);
    }

    NSString *linkRequest = [NSString stringWithFormat:@"%@%@",GatewayRoot,pathValue];
    AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];

    NSMutableURLRequest *req = [[AFJSONRequestSerializer serializer] requestWithMethod:methodTypeValue URLString:linkRequest parameters:nil error:nil];

    [req setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
    if (token) {
       [req setValue:token forHTTPHeaderField:@"AccessToken"];
    }

    [[manager dataTaskWithRequest:req completionHandler:^(NSURLResponse * _Nonnull response, id  _Nullable responseObject, NSError * _Nullable error) {
        if (!error) {
                if (debug) {
                    NSLog(@"response:\n %@ \n",responseObject);
                }
            block(responseObject,nil);
        } else {
            NSLog(@"Error: %@, %@, %@", error, response, responseObject);
            block(nil, error);
        }
    }] resume];
}

我进行了测试,一切都与正常请求相关。 我必须从服务器获取一些图像和视频,但收到此错误:

NSLocalizedDescription=Request failed: unacceptable content-type: image/png NSLocalizedDescription=Request failed: unacceptable content-type: video/mp4

我尝试通过以下方式设置内容类型:

manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"image/jpeg",@"video/mpeg",...nil];

manager.responseSerializer.acceptableContentTypes =[manager.responseSerializer.acceptableContentTypes setByAddingObject:@"image/jpeg",@"video/mpeg",...nil];
  1. 请帮我看看如何设置可接受的内容类型?

  2. 我还有与图像缓存相关的其他问题:在旧版本中,我登录并获取用户配置文件图像,在我注销并使用其他凭据重新登录后,我收到了相同的用户配置文件图像(我发现这是与 AFNetworking 缓存图像有关的问题)。

你能帮我清除缓存请求流程吗?

非常感谢您的帮助!

最佳答案

您可能只想指定适当的responseSerializer,而不是自己设置可接受的内容类型。例如,如果您想要 UIImage,您可以这样做:

manager.responseSerializer = [AFImageResponseSerializer serializer];

如果你想要NSData,你可以这样做:

manager.responseSerializer = [AFHTTPResponseSerializer serializer];

如果您不希望缓存请求,则应将 req.cachePolicy 设置为 NSURLRequestReloadIgnoringCacheData 或实现 AFURLSessionManager 缓存响应 block ,setDataTaskWillCacheResponseBlock。或者,当然,您可以更改服务器,以便那些不应缓存的资源具有相应的 header 字段设置。

关于ios - AFNetworking 3.0 GET/POST 设置可接受的内容类型并清除图像缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36666703/

相关文章:

ios - 如何从 UIViewController 对不同 swift 文件的引用中调用它的函数?

html - 根据当前窗口大小将图像垂直和水平居中

image - 如何使用 ImageQt

ios - 沙盒中的 InAppPurchase(通过测试用户)

ios - 重叠的声音

python - 将 CIFAR 1d 数组从 pickle 转换为图像 (RGB)

ios - 如何在 iOS 上为多个表缓存从服务器加载的图像

php - 对于数千个页面的最快 PHP 网页缓存的建议?

javascript - 谷歌图表需要很长时间才能加载

ios - Cocos2d-x 背景图片显示不正确