博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS开发之普通网络异步请求与文件下载方法
阅读量:6719 次
发布时间:2019-06-25

本文共 3663 字,大约阅读时间需要 12 分钟。

先来说说普通异步下载方法,分为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];}

 

转载于:https://www.cnblogs.com/hecanlin/p/10911370.html

你可能感兴趣的文章
我的友情链接
查看>>
Yellow dog
查看>>
Python网络编程之协程
查看>>
趣学Python之弹球游戏第二阶段--向上运动
查看>>
过滤全文验证正则表达式的一个小程序
查看>>
Cacti的spine进程数引起的问题
查看>>
我的友情链接
查看>>
求一份oracle数据库实习、兼职的工作
查看>>
storm集群的监控
查看>>
Connector|OIM向IBM TDS推送账号(LDAP3)
查看>>
Linux例行性工作at,cron,进程管理
查看>>
vim批量添加删除注释的方法
查看>>
小成本对付宽带我世界实现有线/无线同时上网
查看>>
QT TableWidget应用笔记
查看>>
yum安装Apache Web Server后各个文件存放位置
查看>>
定制更友好的iptables防火墙
查看>>
做软件产品,一定要及时响应用户反馈,及时更新
查看>>
Exchange Server2013 系列:证书的配置
查看>>
以太网帧识别VLAN
查看>>
CloudStack+XenServer详细部署方案(1):方案规划设计
查看>>