ASIHTTPRequest 是一款非常有用的 HTTP 访问开源项目,ASIHTTPRequest使用起来非常方便,可以有效减少代码量.他的功能非常强大,可以实现异步请求,队列请求,缓存,断点续传,进度跟踪,上传文件,HTTP 认证。同时它也加入了 Objective-C 闭包 Block 的支持.其官方网站: http://allseeing-i.com/ASIHTTPRequest/ 。
在使用ASI之前,需要导入一下框架:
CFNetWork.framework
SystemConfiguration.framework
MobileCoreServices.framework
libz.dylib
因为ASI是不支持ARC的,所以如果打算使用ARC功能,也就是arc和非arc混编,需要给非 ARC 模式的代码文件加入 -fno-objc-arc 标签。
一:ASIHTTPRequest实现上传文件功能
//上传- (IBAction)UpLoad:(UIButton *)sender { NSURL *url=[NSURL URLWithString:@"http://localhost:8080/UploadServer/UploadServlet"]; ASIFormDataRequest *request=[ASIFormDataRequest requestWithURL:url]; [request setRequestMethod:@"POST"]; //方法一:主要应用与小文件,将小文件转换为Data类型,再将Data类型的数据放入post请求体中上传 NSData *dataImage=UIImageJPEGRepresentation([UIImage imageNamed:@"1.jpg"], 1); [request appendPostData:dataImage]; //方法二:直接从文件路径找到文件,并放入post请求体中上传,同样适用与小文件 [request appendPostDataFromFile:[[NSBundle mainBundle]pathForResource:@"1" ofType:@"jpg"]]; //方法三:数据流方法(文件不分大小) //允许是从磁盘上读取数据,并将数据上传,默认为NO [request setShouldStreamPostDataFromDisk:YES]; [request setPostBodyFilePath:[[NSBundle mainBundle]pathForResource:@"1" ofType:@"jpg"]]; //使用异步请求 [request startAsynchronous];}
一:ASIHTTPRequest实现文件断点下载
//下载- (IBAction)downLoad:(UIButton *)sender { //判断请求是否为空.(如果双击开始,会产生一个不再受控制的请求) if (_request!=nil) { return; } //如果文件下载完毕就不再下载 if ([[NSFileManager defaultManager]fileExistsAtPath:[self getFilePath]]) { return; } NSString *string=@"http://localhost:8080/downloadSrver/xcode_6.dmg.dmg"; string=[string stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; NSURL *url=[NSURL URLWithString:string]; //创建ASIHTTPRequest请求 _request=[ASIHTTPRequest requestWithURL:url]; //设置文件存放的目标路径 [_request setDownloadDestinationPath:[self getFilePath]]; [_request setDownloadProgressDelegate:self]; //允许断点续传,必须设置 [_request setAllowResumeForFileDownloads:YES]; //设置大文件下载的临时路径 //下载过程中文件一直保存在临时文件中,当文件下载完成后才移入目标路径下 [_request setTemporaryFileDownloadPath:[self getTemoPath]]; //设置代理 _request.delegate=self; _request.downloadProgressDelegate=self; //异步请求 [_request startAsynchronous];}- (IBAction)pause:(UIButton *)sender { //取消请求并清除代理 [_request clearDelegatesAndCancel]; _request=nil;}-(NSString *)getTemoPath{ //设置文件下载的临时路径 NSString *string=[NSTemporaryDirectory() stringByAppendingPathComponent:@"temp"]; return string;}//获取沙盒-(NSString *)getFilePath{ NSString *document=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0]; NSString *filePath=[document stringByAppendingPathComponent:@"xcode6.dmg"]; return filePath;}//获取下载进度-(void)setProgress:(float)newProgress{ _progressVIew.progress=newProgress; _label.text=[NSString stringWithFormat:@"%.2f%%",newProgress*100];}//因为ASI是非ARC,所以系统不会自动释放,需要手动操作-(void)dealloc{ [_request clearDelegatesAndCancel];}
新闻热点
疑难解答