iOS - 使用 AFNetworking 获取图像保持缓存
Posted
技术标签:
【中文标题】iOS - 使用 AFNetworking 获取图像保持缓存【英文标题】:iOS - getting image with AFNetworking keeps cache 【发布时间】:2014-08-06 10:57:57 【问题描述】:在我的应用程序中,我使用的是 RESTKit,所以我的 AFNetworking 版本不是最新的。我不确定如何检查它的版本。 我想从我的服务器下载一张图片,因为响应是 jpg 文件,所以我使用的是 AFNetworking。在第一次下载图像时,它运行良好。然后我删除服务器上的图像并上传一个具有相同名称的新图像。然后,如果我删除应用程序中的图像并重新下载它。在这种情况下,我仍然会得到第一次下载时的旧图片。
这是我的代码:
AFHTTPClient *client = [AFHTTPClient clientWithBaseURL:[NSURL URLWithString:@"http://myserver.com"]];
[client setAuthorizationHeaderWithUsername:name password:password];
[client getPath:[NSString stringWithFormat:@"profile-images/%@.jpg", user.name] parameters:@ success:^(AFHTTPRequestOperation *operation, id responseObject)
NSLog(@"SUCCES");
NSData *imageData = responseObject;
self.tmpImage = [UIImage imageWithData:imageData];
failure:^(AFHTTPRequestOperation *operation, NSError *error)
NSLog(@"FAIL");
self.tmpImage = [UIImage imageNamed:@"myImage.png"];
];
在我看来,该应用“记住”了我在下载图像时向服务器发送的第一个请求。然后当我重新下载它时,它给了我旧照片。有人知道怎么解决吗?
【问题讨论】:
代码是否工作。 【参考方案1】:我终于可以使用NSMutableURLRequest
来解决这个问题。创建请求时,我将cachePolicy
设置为NSURLRequestReloadIgnoringLocalCacheData
。含义:request.cachePolicy = NSURLRequestReloadIgnoringLocalCacheData;
这里是向服务器发送请求的代码:
AFHTTPClient *client = [AFHTTPClient clientWithBaseURL:[NSURL URLWithString:@"http://server.com"]];
[client setAuthorizationHeaderWithUsername:name password:password];
NSMutableURLRequest *request = [client requestWithMethod:@"GET" path:[NSString stringWithFormat:@"profile-images/%@.jpg", user.name] parameters:nil];
request.timeoutInterval = 10;
request.cachePolicy = NSURLRequestReloadIgnoringLocalCacheData;
AFImageRequestOperation *operation;
operation = [AFImageRequestOperation imageRequestOperationWithRequest:request imageProcessingBlock:^UIImage *(UIImage *image)
NSLog(@"block");
return image;
success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image)
NSLog(@"SUCCES");
self.tmpImage = image;
failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error)
NSLog(@"FAIL");
self.tmpImage = [UIImage imageNamed:@"myImage.png"];
];
[operation start];
【讨论】:
【参考方案2】:当您在服务器上上传图像时,首先将图像保存在每次相同名称的文档目录中。在代码图像中保存名称为@""Profile1.jpeg"
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
UIImage *img = [info objectForKey:UIImagePickerControllerOriginalImage];
img = [self imageWithImage:img scaledToSize:CGSizeMake(70, 70)];
[btn_Photo setImage:img forState:UIControlStateNormal];
NSData *webData = UIImageJPEGRepresentation(img, 0.5);
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
self.savedImagePath = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"%@",@"Profile1.jpeg"]];
[webData writeToFile:self.savedImagePath atomically:YES];
[picker dismissViewControllerAnimated:YES completion:^
//[[UIApplication sharedApplication] setStatusBarHidden:YES];
];
使用新的ANetworking上传图片如下代码New AFNetworking
AFHTTPRequestOperationManager *Manager = [AFHTTPRequestOperationManager manager];
[Manager POST:str_Submit parameters:parameters constructingBodyWithBlock:^(id<AFMultipartFormData> formData)
NSURL *filePath_Profile_Logo = [NSURL fileURLWithPath:self.savedImagePath];
[formData appendPartWithFileURL:filePath_Profile_Logo name:@"userfile" error:nil];
success:^(AFHTTPRequestOperation *operation, id responseObject)
NSLog(@"Success");
failure:^(AFHTTPRequestOperation *operation, NSError *error)
NSLog(@"Fail")
];
请在上传之前检查您的文档目录路径图像是否更改。 请
【讨论】:
我可以请求不使用缓存吗?我要下载最近更新的头像 您的个人资料图片也在缓存中,并使用文档目录路径使用它。 我希望我的第二次下载不使用缓存。有可能吗? 第二次没有得到。因为当从 iphone 中删除应用程序时,一切都清楚了。 对不起,我不明白你的回答。以上是关于iOS - 使用 AFNetworking 获取图像保持缓存的主要内容,如果未能解决你的问题,请参考以下文章
使用 AFNetworking ios xcode 获取 gmail 邮件列表