AFNetworking 3.0 GET/POST 设置 acceptableContentTypes 并清除图像缓存
AFNetworking 3.0 GET/POST set acceptableContentTypes and clear cache for images
我在我的项目中使用 AFNetworking 作为网络层。
对于图像,我遇到了一些与缓存相关的问题,我将框架更新到 3.0 版本。
在更新过程中,我在获取媒体内容(图像和视频)的请求方面遇到了一些问题。
这是我的 class :
+ (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];
拜托,你能帮我设置可接受的内容类型吗?
我还有其他与图像缓存相关的问题:使用旧版本登录并获取用户配置文件图像,在我注销并使用其他凭据重新登录后,我收到了相同的用户配置文件图像(我发现这是一个与 AFNetworking 缓存图像有关的问题)。
你能帮我清除缓存请求流程吗?
非常感谢您的帮助!
与其自己设置可接受的内容类型,您可能只想指定适当的 responseSerializer
。例如,如果你想要 UIImage
,你可以这样做:
manager.responseSerializer = [AFImageResponseSerializer serializer];
如果你想要NSData
,你可以这样做:
manager.responseSerializer = [AFHTTPResponseSerializer serializer];
如果您不想缓存您的请求,您应该将 req.cachePolicy
设置为 NSURLRequestReloadIgnoringCacheData
或实施 AFURLSessionManager
缓存响应块 setDataTaskWillCacheResponseBlock
。或者,当然,您可以更改您的服务器,以便那些不应缓存的资源相应地设置其 header 字段。
我在我的项目中使用 AFNetworking 作为网络层。 对于图像,我遇到了一些与缓存相关的问题,我将框架更新到 3.0 版本。
在更新过程中,我在获取媒体内容(图像和视频)的请求方面遇到了一些问题。
这是我的 class :
+ (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];
拜托,你能帮我设置可接受的内容类型吗?
我还有其他与图像缓存相关的问题:使用旧版本登录并获取用户配置文件图像,在我注销并使用其他凭据重新登录后,我收到了相同的用户配置文件图像(我发现这是一个与 AFNetworking 缓存图像有关的问题)。
你能帮我清除缓存请求流程吗?
非常感谢您的帮助!
与其自己设置可接受的内容类型,您可能只想指定适当的 responseSerializer
。例如,如果你想要 UIImage
,你可以这样做:
manager.responseSerializer = [AFImageResponseSerializer serializer];
如果你想要NSData
,你可以这样做:
manager.responseSerializer = [AFHTTPResponseSerializer serializer];
如果您不想缓存您的请求,您应该将 req.cachePolicy
设置为 NSURLRequestReloadIgnoringCacheData
或实施 AFURLSessionManager
缓存响应块 setDataTaskWillCacheResponseBlock
。或者,当然,您可以更改您的服务器,以便那些不应缓存的资源相应地设置其 header 字段。