先來說說普通異步下載方法,分為POST、GET兩種
/** GET請求獲取數據*/ + (void)getDataWithUrl:(NSString *)strUrl finishBlock:(ECGNCNSDictionaryAndNSErrorBlock)finishBlock {if (strUrl.length == 0) {return;}NSURL *url = [NSURL URLWithString:strUrl];NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];request.HTTPMethod = @"GET";[request setValue:@"application/json; charset=utf-8" forHTTPHeaderField:@"Content-Type"];NSURLSession *session = [NSURLSession sharedSession];NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {//解析并回調數據NSDictionary *dicData = [self dictionaryForJsonData:data];if (finishBlock) {finishBlock(dicData, error);}}];[dataTask resume]; }/** POST請求獲取數據*/ + (void)postParam:(NSDictionary *)dicParam toUrl:(NSString *)strUrl finishBlock:(ECGNCNSDictionaryAndNSErrorBlock)finishBlock {if (dicParam == nil || strUrl.length == 0) {return;}NSURL *url = [NSURL URLWithString:strUrl];NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];request.HTTPMethod = @"POST";[request setValue:@"application/json; charset=utf-8" forHTTPHeaderField:@"Content-Type"];request.HTTPBody = [self compactFormatDataForDictionary:dicParam];NSURLSession *session = [NSURLSession sharedSession];NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {//解析并回調數據NSDictionary *dicData = [self dictionaryForJsonData:data];if (finishBlock) {finishBlock(dicData, error);}}];[dataTask resume]; }/** 將字典轉換成json格式字符串,不含\n這些符號*/ - (NSData *)compactFormatDataForDictionary:(NSDictionary *)dicJson {if (![dicJson isKindOfClass:[NSDictionary class]]) {return nil;}NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dicJson options:0 error:nil];if (![jsonData isKindOfClass:[NSData class]]) {return nil;}return jsonData; }/** 將二進制數據轉換成字典*/ - (NSDictionary *)dictionaryForJsonData:(NSData *)jsonData {if (![jsonData isKindOfClass:[NSData class]] || jsonData.length < 1) {return nil;}id jsonObj = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingAllowFragments error:nil];if (![jsonObj isKindOfClass:[NSDictionary class]]) {return nil;}return [NSDictionary dictionaryWithDictionary:(NSDictionary *)jsonObj]; }
?
下面說說下載文件的方法
/** 下載文件方法*/ - (void)downLoadFileWithUrl:(NSString *)urlStr finishBlock:(GSNetLibTMIdAndDataAndErrorBlock)finishBlock {if (urlStr.length == 0) {return;}NSURL *url = [NSURL URLWithString:urlStr];NSURLSession *session = [NSURLSession sharedSession];//構造下載任務NSURLSessionDownloadTask *downloadTask = [session downloadTaskWithURL:url completionHandler:^(NSURL *location, NSURLResponse *response, NSError *error) {//下載成功回調,文件數據會被默認存儲在一個臨時目錄if (error == nil) {if (location != nil && [location path].length > 0) {NSString *tmpFilePath = [location path];NSData *data = [NSData dataWithContentsOfFile:tmpFilePath];//回調數據if (finishBlock) {finishBlock(0, data, error);}//刪除臨時目錄文件NSFileManager *fileMgr = [NSFileManager defaultManager];[fileMgr removeItemAtPath:tmpFilePath error:nil];}}}];//執行任務 [downloadTask resume]; }
?