iOS核心笔记——网络编程-NSURLSessionDownloadTask

1、大文件下载:

1-1、创建下载任务:
方式一:创建时同时设置代理监听下载进度:
1.-(void)downloadDelegate2.{3.    //01 确定资源路径4.    NSURL *url = [NSURL URLWithString:@"http://img4q.duitang.com/uploads/item/201406/09/20140609150919_ZztLd.jpeg"];5.6.    //02 创建请求对象7.    NSURLRequest *request = [NSURLRequest requestWithURL:url];8.9.    //03 创建会话对象 设置代理10.    NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration] delegate:self delegateQueue:[NSOperationQueue mainQueue]];11.12.    //04 创建downloadTask13.    NSURLSessionDownloadTask *downloadTask =[session downloadTaskWithRequest:request];14.15.    //05 发送请求16.    [downloadTask resume];17.18.}

方式二:直接创建NSURLSessionDownloadTask对象:
1.//缺点:无法监听文件的进度2.-(void)download3.{4.    //01 确定资源路径5.    NSURL *url = [NSURL URLWithString:@"http://img4q.duitang.com/uploads/item/201406/09/20140609150919_ZztLd.jpeg"];6.7.    //02 创建请求对象8.    NSURLRequest *request = [NSURLRequest requestWithURL:url];9.10.    //03 创建会话对象11.    NSURLSession *session = [NSURLSession sharedSession];12.13.    //04 创建downloadTask14.    /* 参数说明15.     *16.     * 第一个参数:请求对象17.     * 第二个参数:completionHandler 请求完成(成功|失败)的时候调用18.     * location:位置 文件的位置 内部已经实现了边接收数据边写沙盒的操作19.     * response:响应头信息20.     */21.    NSURLSessionDownloadTask *downloadTask = [session downloadTaskWithRequest:request completionHandler:^(NSURL * _Nullable location, NSURLResponse * _Nullable response, NSError * _Nullable error) {22.        //默认已经把数据写到磁盘中:tmp/...随时可能被删除23.24.        //转移文件(转移到安全的地方去)25.        NSString *cachePath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];26.        NSString *fullPath = [cachePath stringByAppendingPathComponent:response.suggestedFilename];27.28.        //路径 ->NSURL29.        //URLWithString 不做其他额外的处理30.        //fileURLWithPath31.        NSLog(@"%@",[NSURL URLWithString:fullPath]);32.        NSLog(@"%@",[NSURL fileURLWithPath:fullPath]);33.34.        [[NSFileManager defaultManager] moveItemAtURL:location toURL:[NSURL fileURLWithPath:fullPath] error:nil];35.    }];36.37.    //05 发送请求38.    [downloadTask resume];39.}

1-2、NSURLSessionDownloadTask常用代理方法:
1.#pragma mark NSURLSessionDownloadDelegate2.3.//01 写数据的时候调用4.// bytesWritten 本次写入的数据大小5.// totalBytesWritten  写入数据的总大小6.// totalBytesExpectedToWrite 文件的总大小7.-(void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didWriteData:(int64_t)bytesWritten totalBytesWritten:(int64_t)totalBytesWritten totalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite8.{9.    NSLog(@"%f",1.0 * totalBytesWritten / totalBytesExpectedToWrite);10.}

?重要:开始向应用沙盒中默认路径下的文件开始写入数据时调用。


1.//02 下载完成的时候调用2.-(void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didFinishDownloadingToURL:(NSURL *)location3.{4.    //转移文件(转移到安全的地方去)5.    NSString *cachePath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];6.    NSString *fullPath = [cachePath stringByAppendingPathComponent:downloadTask.response.suggestedFilename];7.8.    //剪切文件9.    [[NSFileManager defaultManager] moveItemAtURL:location toURL:[NSURL fileURLWithPath:fullPath] error:nil];10.}

?重要:下载完成时调用该方法,默认下载完成便会删除该路径下的文件;所以,需要在下载完成时将文件转移至其它安全的路径下。


1.//03 整个请求结束或者是失败的时候调用2.-(void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error3.{4.    NSLog(@"didCompleteWithError");5.}

?重要:当下载任务完成时或失败时调用。


2、断点续传:

?重要:1、NSURLSessionDownloadTask能使用suspend(挂起下载任务)resume(启动下载任务)cancel(不可恢复取消下载任务)cancelByProducingResumeData:(可恢复下载任务)操作下载任务。

?重要:2、NSURLSessionDownloadTask使用cancel方法取消下载操作之后便不能够再恢复下载任务(即:使用cancel方法取消之后便不能再进行断点续传,因为,downloadTask如果不做特殊处理,下载操作执行完毕或者使用cancel方法取消将会立即删除保存在沙盒路径中的文件;所以,不能使用NSURLSessionDownloadTask实现离线下载功能,也不能使用cancel方法实现断点续传功能)。

?重要:3、使用cancelByProducingResumeData:方法取消下载任务,使用属性保存resumeData数据;便可以实现断点续传功能。

?重要:4、resumeData:可以用来恢复下载的数据,并不是沙盒中保存的已经下载好的文件数据。


2-1、使用属性保存恢复下载操作所需的resumeData数据:
[email protected] (nonatomic, strong) NSData *resumeData;

2-2、使用cancelByProducingResumeData:暂停下载操作:
1.- (IBAction)cacnelBtnClick:(id)sender2.{3.    //取消 普通的取消操作是不可以恢复的4.    //[self.downloadTask cancel];5.6.    //取消,可以恢复的取消操作7.    //resumeData 可以用来恢复下载的数据 并不是沙盒中保存的已经下载好的文件数据8.    [self.downloadTask cancelByProducingResumeData:^(NSData * _Nullable resumeData) {9.        self.resumeData = resumeData;10.    }];11.12.    self.downloadTask = nil;13.    NSLog(@"取消下载任务+++");14.}

2-3、恢复下载任务:
1.- (IBAction)resumeBtnClick:(id)sender2.{3.    //暂停->恢复4.    if(self.resumeData)5.    {6.        //取消->恢复7.        //在恢复下载的时候,判断是否有可以用来进行恢复下载的数据,如果有那么就根据该数据创建一个新的网络请求8.        self.downloadTask = [self.session downloadTaskWithResumeData:self.resumeData];9.        self.resumeData = nil;10.    }11.12.    [self.downloadTask resume];13.}

时间: 2024-10-05 02:53:26

iOS核心笔记——网络编程-NSURLSessionDownloadTask的相关文章

iOS核心笔记——网络编程-网络安全

1.数据安全: 1.01 攻城利器:Charles(公司中一般都使用该工具来抓包,并做网络测试)2.注意:Charles在使用中的乱码问题,可以显示包内容,然后打开info.plist文件,找到java目录下面的VMOptions,在后面添加一项:-Dfile.encoding=UTF-83.02 数据安全的原则4. 1)在网络上"不允许"传输用户隐私数据的"明文"5. 2.)在本地"不允许"保存用户隐私数据的"明文"6.03

iOS核心笔记——网络编程-HTTPS协议

1.HTTPS的基本使用: 1.HTTPS简单说明: ?了解:HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版. ?重要:即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL. 它是一个URI scheme(抽象标识符体系),句法类同http:体系.用于安全的HTTP数据传输. ?重要:https:URL:表明它使用了HTTPS,

iOS核心笔记——网络编程-文件MIMEType

1.获取文件的MIMEType: 1-1.方式一:查看对照表 查看文件的MIMEType 1-2.方式二:发送网络请求-从响应头中获取 1. [[[NSURLSession sharedSession] dataTaskWithURL:[NSURL fileURLWithPath:@"/Users/xiaomage/Desktop/Snip20161126_238.png"] completionHandler:^(NSData * _Nullable data, NSURLRespo

iOS核心笔记——网络编程-文件上传

1.文件上传: ?重要:当用户想向服务器传送客户端本地文件时,此时,需要使用POST请求方式.NSURLSessionUploadTask文件上传任务将文件传递至服务器. 1-1.技术点: ?重要:①设置请求头信息,告诉服务器本次网络请求是在向服务器传送文件:②拼接要上传的文件的数据,拼接过程中一定要严格按照文件上传格式进行,否则,文件上传将会失败. 1-2.文件上传格式: 1.设置请求头信息: ?重要:设置请求头,告诉服务器这是一次文件上传操作. 2.设置文件参数: ?重要:设置请求体,将文件

iOS核心笔记——网络编程-监控网络状态

1.AFN监控网络状态: 1.- (void)afnMonitoring2.{3. // 开始网络监控4. AFNetworkReachabilityManager *mgr = [AFNetworkReachabilityManager sharedManager];5.6. [mgr setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {7. NSLog(@"-----当前的网络状态---%zd&quo

iOS核心笔记——网络编程-ASI与AFN的区别

一.底层实现: 1> AFN的底层基于OC的NSURLConnection和NSURLSession: 2> ASI的底层基于纯C语言的CFNetwork框架: 3> ASI的运行性能 高于 AFN. 二.对服务器返回的数据处理 1> ASI没有直接提供对服务器数据处理的方式,直接返回data\string: 2> AFN提供了多种对服务器数据处理的方式: JSON处理: XML处理: 其他处理. 三.监听请求的过程: 1> AFN提供了success和failure两

iOS核心笔记——网络编程-XML

1.XML简介: ?了解:XML的全称是Extensible Markup Language,翻译为"可扩展标记语言":与JSON一样,也是常用的一种用于交互的数据格式:一般也称为XML文档(XML Document). XML文档示例: 2.XML语法介绍: 2-1.XML-文档声明: 2-2.XML-元素(Element): 2-3.XML-元素注意: 2-4.XML-属性(Attribute): 3.XML解析方案: ?了解:XML有2种解析方式:①DOM:一次性将整个XML文档

IOS学习笔记 -- 网络编程

一.HTTP协议1.面试题: 聊一下HTTP协议(表达对HTTP协议的看法)* HTTP协议的全称: 超文本传输协议, 定制传输数据的规范(客户端和服务器之间的数据传输规范)* 描述HTTP协议完整的通信过程 2.通信过程1> 请求* 客户端 --> 服务器* 请求的内容a."请求行" : 请求方法\请求资源路径\HTTP协议版本GET /MJServer/login?username=123&pwd=123&method=get&type=JSON

iOS开发之网络编程--2、NSURLSessionDownloadTask文件下载

本文内容大纲: 1.回顾NSURLSessionTask 2.NSURLSessionDownloadTask大文件之block下载 3.NSURLSessionDownloadTask大文件之代理方法下载 4.NSURLSessionDownloadTask大文件之代理方法实现断点续传下载 前言:如果读者是第一次阅读或者是学习关于本篇要介绍的NSURLSession的知识,最好先阅读本人前篇<iOS开发之网络编程--1.NSURLSession的基本使用>然后再学习本篇比较好. 1.回顾NS