IOS开发网络篇之──ASIHTTPRequest示例(支持断点续传)
来源:互联网 发布:java jdbc 批量insert 编辑:程序博客网 时间:2024/06/03 18:59
一、创建网络请求队列
首先,创建网络请求队列,如下:
<span style="font-size:14px;">ASINetworkQueue *que = [[ASINetworkQueue alloc] init];self.netWorkQueue = que;[que release];[self.netWorkQueue reset];[self.netWorkQueue setShowAccurateProgress:YES];[self.netWorkQueue go];</span>
二、创建存放路径
<span style="font-size:14px;font-weight: normal;">//初始化Documents路径 NSString *path = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"]; //初始化临时文件路径 NSString *folderPath = [path stringByAppendingPathComponent:@"temp"]; //创建文件管理器 NSFileManager *fileManager = [NSFileManager defaultManager]; //判断temp文件夹是否存在 BOOL fileExists = [fileManager fileExistsAtPath:folderPath]; if (!fileExists) {//如果不存在说创建,因为下载时,不会自动创建文件夹 [fileManager createDirectoryAtPath:folderPath withIntermediateDirectories:YES attributes:nil error:nil]; }</span>
三、发送下载请求
这里对下面几个对象说明一下:CustomCell是我自定义的cell,cell上面有下载和暂停两个按钮,其tag值为cell所在的行,因此这里的[sendertag]为下载按钮的tag值,self.downloadArray为array数组对象,存放要下载的资源字典信息,在该字典中有一键为URL,它对应的值就是我们下载链接。
这些东西,根据自己的实际需要改动一下即可使用
CustomCell *cell = (CustomCell *)[self.myTableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:[sender tag] inSection:0]]; NSString *filePath = [[self.downloadArray objectAtIndex:[sender tag]] objectForKey:@"URL"]; NSLog(@"filePath=%@",filePath); //初始下载路径 NSURL *url = [NSURL URLWithString:filePath]; //设置下载路径 ASIHTTPRequest *request = [[ASIHTTPRequest alloc] initWithURL:url]; //设置ASIHTTPRequest代理 request.delegate = self; //初始化保存ZIP文件路径 NSString *savePath = [path stringByAppendingPathComponent:[NSString stringWithFormat:@"book_%d.zip",[sender tag]]]; //初始化临时文件路径 NSString *tempPath = [path stringByAppendingPathComponent:[NSString stringWithFormat:@"temp/book_%d.zip.temp",[sender tag]]]; //设置文件保存路径 [request setDownloadDestinationPath:savePath]; //设置临时文件路径 [request setTemporaryFileDownloadPath:tempPath]; //设置进度条的代理, [request setDownloadProgressDelegate:cell]; //设置是是否支持断点下载 [request setAllowResumeForFileDownloads:YES]; //设置基本信息 [request setUserInfo:[NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithInt:[sender tag]],@"bookID",nil]]; NSLog(@"UserInfo=%@",request.userInfo); //添加到ASINetworkQueue队列去下载 [self.netWorkQueue addOperation:request]; //收回request [request release];//暂停请求这里的cell下下载时的一样,CustomCell *cell = (CustomCell *)[self.myTableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:[sender tag] inSection:0]]; for (ASIHTTPRequest *request in [self.netWorkQueue operations]) { NSInteger bookid = [[request.userInfo objectForKey:@"bookID"] intValue];//查看userinfo信息 if ([sender tag] == bookid) {//判断ID是否匹配 //暂停匹配对象 [request clearDelegatesAndCancel]; } }
四、ASIHTTPRequestDelegate回调方法
上面已经把下载请求与暂停请求实现,点击下载时,开始下载资源;当点暂停时,下载中断;当我们再点击下载按钮时,继续下载,在第二步的[request setAllowResumeForFileDownloads:YES]设置是是否支持断点下载。下面要实现ASIHTTPRequestDelegate代理方法如下:
#pragma mark -#pragma mark ASIHTTPRequestDelegate method//ASIHTTPRequestDelegate,下载之前获取信息的方法,主要获取下载内容的大小,可以显示下载进度多少字节- (void)request:(ASIHTTPRequest *)request didReceiveResponseHeaders:(NSDictionary *)responseHeaders { NSLog(@"didReceiveResponseHeaders-%@",[responseHeaders valueForKey:@"Content-Length"]); NSLog(@"contentlength=%f",request.contentLength/1024.0/1024.0); int bookid = [[request.userInfo objectForKey:@"bookID"] intValue]; NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; float tempConLen = [[userDefaults objectForKey:[NSString stringWithFormat:@"book_%d_contentLength",bookid]] floatValue]; NSLog(@"tempConLen=%f",tempConLen); //如果没有保存,则持久化他的内容大小 if (tempConLen == 0 ) {//如果没有保存,则持久化他的内容大小 [userDefaults setObject:[NSNumber numberWithFloat:request.contentLength/1024.0/1024.0] forKey:[NSString stringWithFormat:@"book_%d_contentLength",bookid]]; }}//ASIHTTPRequestDelegate,下载完成时,执行的方法- (void)requestFinished:(ASIHTTPRequest *)request { int bookid = [[request.userInfo objectForKey:@"bookID"] intValue]; CustomCell *cell = (CustomCell *)[self.myTableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:bookid inSection:0]]; cell.downloadCompleteStatus = YES; cell.progressView.progress = 0.0; }
经过上述步骤,一个支持断点续传的功能程序实现了!
0 0
- IOS开发网络篇之──ASIHTTPRequest下载示例(支持断点续传)
- IOS开发网络篇之──ASIHTTPRequest下载示例(支持断点续传)
- 【转】IOS开发网络篇之──ASIHTTPRequest下载示例(支持断点续传)
- IOS开发网络篇之──ASIHTTPRequest下载示例(支持断点续传)
- IOS开发网络篇之──ASIHTTPRequest下载示例(支持断点续传)
- IOS开发网络篇之──ASIHTTPRequest下载示例(支持断点续传)
- IOS开发网络篇之──ASIHTTPRequest下载示例(支持断点续传)
- IOS开发网络篇之──ASIHTTPRequest下载示例(支持断点续传)
- IOS开发网络篇之──ASIHTTPRequest下载示例(支持断点续传)
- IOS开发网络篇之──ASIHTTPRequest下载示例(支持断点续传)
- IOS开发网络篇之──ASIHTTPRequest下载示例(支持断点续传)
- IOS开发网络篇之──ASIHTTPRequest下载示例(支持断点续传)
- IOS开发网络篇之──ASIHTTPRequest下载示例(支持断点续传)
- IOS开发网络篇之──ASIHTTPRequest下载示例(支持断点续传)
- IOS开发网络篇之──ASIHTTPRequest下载示例(支持断点续传)
- IOS开发网络篇之──ASIHTTPRequest下载示例(支持断点续传)
- IOS开发网络篇之──ASIHTTPRequest下载示例(支持断点续传)
- IOS开发网络篇之──ASIHTTPRequest下载示例(支持断点续传)
- 通过AFNetworking下载网络闪屏用的图片并存储到本地同时获取header头相关信息
- 基姆拉尔森计算公式
- selenium IDE mac 使用安装
- leetcode 之 Maximum Depth of Binary Tree
- 远程通讯之rmi开发案例1---Java基础实现rmi功能
- IOS开发网络篇之──ASIHTTPRequest示例(支持断点续传)
- JUnit(>4.0)@BeforeClass、@Before、@Test、@After、@AfterClass、@Ignore
- 利用php调用C语言 扩展PHP的功能
- openwrt RT5350使能两个UART
- 计算几何
- POJ 2516 Minimum Cost(费用流)
- WEB界面客制化之采购申请审批界面(错误做法)
- Java Executors(线程池)
- 第十一周项目二——输出两个数的最大公约数