2017-04-06 13 views
2

AFNetWorking.Itsを使用してファイルをダウンロードしています。そして、私は "/ Documents"にファイルを保存しましたが、私はこの要求を再度呼び出すと再びダウンロードされました。 NSURLCacheのようなこれらのファイルをキャッシュする方法はありますか?もう一度リクエストしてAFでフォルダ内に見つけたら、ダウンロードせずにもう一度読む。AFNetworkingのキャッシュファイルをダウンロードします。

ここに私のコードです。

AFHTTPSessionManager * manager = [AFHTTPSessionManager manager]; 

manager.requestSerializer = [AFHTTPRequestSerializer serializer]; 
manager.responseSerializer = [AFHTTPResponseSerializer serializer]; 

NSString * urlString = @"http://wiki.chinaxue.com/images/e/ee/super.docx"; 
NSString * string = [urlString stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]]; 

NSURLRequest * requesturl = [NSURLRequest requestWithURL:[NSURL URLWithString:string]]; 

NSURLSessionDownloadTask *task = [manager downloadTaskWithRequest:requesturl progress:^ (NSProgress * _Nonnull downloadProgress) { 
    // 
    NSLog(@"%lld---%lld",downloadProgress.totalUnitCount, downloadProgress.completedUnitCount); 
} destination:^NSURL *_Nonnull(NSURL *_Nonnull targetPath, NSURLResponse * _Nonnull response) { 

    NSString * DocumentPath = [KYCachedManager Share].documentPath; // filePath where download files stored 

    NSString * documentName = [NSString stringWithFormat:@"%@",response.suggestedFilename]; 
    NSString *path = [DocumentPath stringByAppendingPathComponent:documentName]; 

    MBLog(@"%@",path); 

    return [NSURL fileURLWithPath:path]; 

} completionHandler:^(NSURLResponse *_Nonnull response, NSURL * _Nullable filePath,NSError * _Nullable error) { 
    MBLog(@"%@",filePath); 
    complete(filePath); 
}]; 

downloadTaskから「response.suggestedFilename」を取得しようとしましたが、失敗しました。 別の質問:リクエストなしでresponse.suggestedFilenameを取得するにはどうすればよいですか?その後、私はfileManagerを使って自分自身を見つけることができました。見つかった場合はelse要求を読んでください。

答えて

1

AFNetworkingは既にNSURLCacheによって提供されているキャッシュ機能を利用しますが、セットアップが必要です。

仲間としてキャッシュを設定してから、独自のコードを使用してダウンロードしてください。

- (void)setupCache 
{ 
     NSURLCache *urlCache = [[NSURLCache alloc] initWithMemoryCapacity:1024*1024*4 // 1MB mem 
             cachediskCapacity:1024*1024*5 // 5MB disk cache                          
                 diskPath:nil]; 
     [NSURLCache setSharedURLCache:urlCache]; 
} 
    //for lower iphone device like iphone 5 
- (void)setupCache 
{ 
SDURLCache *urlCache = [[SDURLCache alloc] initWithMemoryCapacity:1024*1024 // 1MB mem cache 
                diskCapacity:1024*1024*5 // 5MB disk cache 
                 diskPath:[SDURLCache defaultCachePath]]; 
[NSURLCache setSharedURLCache:urlCache]; 
} 
+1

私はアプリケーションを段階的に実行します。私は最初にファイルの終了を要求し、次にWi-Fiを閉じてもう一度要求し、ネットワークエラーによるエラーで完全なブロックを実行します。それはキャッシュされたことが動作していないことを証明しています –

+0

その何かを予測するための十分な説明ではありません。 –

+0

私のコードを試しましたか? –

関連する問題