网络篇-NSURLSessionDownloadTask进度下载(续上节)
2016-01-22 13:40
351 查看
简述:
在上一节中介绍了一下
代码:
补充
在代理中,我们有两个重要的代理方法:
第一个接受服务器返回的数据,里面的话给我们传过来三个参数:
那么在这个代理方法里面就是设置好我们Progress View(进度条)控件的进度的,只要第二个重要的代理方法就是
第二个就是下载完成之后,回调的方法,里面传给我们两个参数:
我们可以在这个方法中把所下载的文件,移动到某一个长期保存而不会随时删除的文件夹中,这里我是把它保存到我们的Caches中去了
结束
在上一节中介绍了一下
NSURLSession,也介绍了一下
NSURLSessionDownloadTask的普通下载图片使用,并没有使用到具有进度的下载,那么在这一节中,我们看看如何使用进度下载,实时的进行界面的更新,这里的界面的更新也就是我们的Progress View(进度条)控件进度的一个更新
代码:
1、首先在storyboard里面拖入一个Progress View(进度条)控件,并且在控制器中拖入Progress View属性,用于后面的界面更新 @interface ViewController ()<NSURLSessionDownloadDelegate> @property (weak, nonatomic) IBOutlet UIProgressView *progressView; @end 2、完成上面的步骤了,那么现在就是进行三部曲了 2.1、创建NSURLSession 2.2、创建任务(task) 2.3、执行任务 - (void)viewDidLoad { [super viewDidLoad]; // 1.创建NSURLSession /* 第一个参数: 全局的配置 第二个参数: 让谁成为session的代理 第三个参数: 告诉系统代理方法在哪个线程中执行 */ //1.1创建URL NSURL *url = [NSURL URLWithString:@"http://d.pcs.baidu.com/file/2b66fa1c93d8322d5299a1befc59b16c?fid=204559171-250528-1042286675318370&time=1453435914&rt=sh&sign=FDTAERV-DCb740ccc5511e5e8fedcff06b081203-X%2Bcz8N4IQb25c4wIKAyYl1HHW2M%3D&expires=8h&chkv=1&chkbd=0&chkpc=&dp-logid=498837374116132296&dp-callid=0&r=107651804"]; NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration] delegate:self delegateQueue:[NSOperationQueue mainQueue]]; // 2、利用NSURLSessionDownloadTask创建任务(task) NSURLSessionDownloadTask *task = [session downloadTaskWithURL:url]; // 3、执行任务 [task resume]; } 3、基本上到这里就是设置代理了,代理一运行,我们就完事了, /* 1.接收到服务器返回的数据 bytesWritten: 当前这一次写入的数据大小 totalBytesWritten: 已经写入到本地文件的总大小 totalBytesExpectedToWrite : 被下载文件的总大小 */ - (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didWriteData:(int64_t)bytesWritten totalBytesWritten:(int64_t)totalBytesWritten totalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite { //给progressView赋值进度 self.progressView.progress = 1.0 * totalBytesWritten / totalBytesExpectedToWrite; } /* 2.下载完成 downloadTask:里面包含请求信息,以及响应信息 location:下载后自动帮我保存的地址 */ - (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didFinishDownloadingToURL:(NSURL *)location { //location为下载好的文件路径 //NSLog(@"didFinishDownloadingToURL, %@", location); //1、生成的Caches地址 NSString *cacepath = [[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingString:downloadTask.response.suggestedFilename]; //2、移动图片的存储地址 NSFileManager *manager = [NSFileManager defaultManager]; [manager moveItemAtURL:location toURL:[NSURL fileURLWithPath:cacepath] error:nil]; } /* 3.请求完毕 如果有错误, 那么error有值 */ - (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error { if (!error) { NSLog(@"请求成功"); }else{ NSLog(@"请求失败"); } }
补充
在代理中,我们有两个重要的代理方法:
第一个接受服务器返回的数据,里面的话给我们传过来三个参数:
1、当前返回数据的大小
2、已经写入临时文件数据的大小
3、下载数据的总大小
那么在这个代理方法里面就是设置好我们Progress View(进度条)控件的进度的,只要第二个重要的代理方法就是
第二个就是下载完成之后,回调的方法,里面传给我们两个参数:
1、请求信息已经响应信息
2、下载完,文件保存的路径(路径为我们沙盒的temp临时文件夹,里面的数据随时可能被删除)
我们可以在这个方法中把所下载的文件,移动到某一个长期保存而不会随时删除的文件夹中,这里我是把它保存到我们的Caches中去了
结束
本章到此结束 欢迎各位码友随意转载并指正
相关文章推荐
- 1、大部分社交平台接口不支持https协议。
- Android 监听网络状态+源代码
- linux分享一:网络设置
- 【TCP】TCP的几个状态 (SYN, FIN, ACK, PSH, RST, URG)
- 上传文件到http服务器上
- 局域网下,虚拟机为其他主机提供服务
- HTTP状态码大全
- 网络安全产品介绍:
- HTTP幂等性
- 测试网络连接状态
- HTTP协议 (二) 基本认证
- 网络地址转换NAT原理及其作用
- TCP选项之SO_LINGER
- 几种经典的网络服务器架构模型的分析与比较
- xmlHttp.send(null)与xmlHttp.send…
- TCP/IP协议三次握手流程
- Lighttpd1.4.20源码分析 笔记 状态机之错误处理和连接关闭
- canvas详解(网络转载)
- TCP、UDP端口映射知识扩展
- TCP/IP协议三次握手流程