簡體   English   中英

iOS-使用AFNetworking獲取圖像可保持緩存

[英]iOS - getting image with AFNetworking keeps cache

在我的應用中,我使用的是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"];
    }];

在我看來,該應用程序“記住”了我下載圖像時發送到服務器的第一個請求。 然后,當我重新下載它時,它給了我舊照片。 有人知道如何解決嗎?

我終於可以使用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];

當您首先在服務器上上傳圖像時,每次都將圖像以相同的名稱保存在文檔目錄中。 代碼圖像中的保存名稱為@""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上傳圖片,如下代碼新的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")
 }];

上載或未上傳之前,請檢查您的文檔目錄路徑圖像是否已更改。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM