iOS开发之网络编程--3、NSURLSessionDataTask实现文件下载(离线断点续传下载)
2023-09-11 14:21:34 时间
前言:使用NSURLSessionDownloadTask满足不这个需要离线断点续传的下载需求,所以这里就需要使用NSURLSessionDataTask的代理方法来处理下载大文件,并且实现离线断点续传。
关于NSURLSessionDownloadTask的知识,可以请读者阅读本人的前篇:《iOS开发之网络编程--2、NSURLSessionDownloadTask文件下载》。
另外呢,因为NSURLSessionDownloadTask和NSURLSessionDataTask分别都是NSURLSessionTask的上层继承拓展。比如NSURLSessionDownloadTask在代理方法中内部实现了
将文件边下载边移存到沙盒中,而使用NSURLSessionDataTask就需要自己完成这个过程了,但是NSURLSessionDataTask可以实现离线断点续传。
实现离线的断点续传的基本思路:
1、比如应用程序下载15M的小视视频,但是下载到5M的时候这个程序可能是因为用户需要其退出或者是意外崩溃退出或者是断网了,导致还有10M没有下载成功。
2、为了能够在重新启动程序之后还能够继续下载剩下的10M,需要在程序继续下载的时候判断和读取本地缓存中是否存在已经下载的数据和数据长度,然后在该数据长度之后继续下载剩下的部分。
用于测试代码的API接口:http://120.25.226.186:32812/resources/videos/minion_02.mp4
1、NSURLSessionDataTask实现文件下载(未实现离线断点续传下载)
1-1、编程思路实现细节:
<a> 创建会话和请求,最后由会话创建请求任务,并启动任务。
<b>添加协议<NSURLSessionDataDelegate> ,设置代理,实现代理方法。
<c>在获取服务器返回的响应代理方法中获取文件名和要下载的文件长度,拼接沙盒路径,根据该路径创建输出流,开启输出流。别忘了还需要设置接收服务器响应。
<d>在获取服务器返回的数据代理方法中,不断的使用输出流将数据写入,并通过获取的数据设置进度条进度。
<e>在结束服务器请求的代理方法中,关闭输出流,释放输出流的指针。另外可能会需要打印错误信息。
1-2、代码实现:
2、NSURLSessionDataTask实现文件下载(实现离线断点续传下载)
2-1、编程思路实现细节:
<a> 根据文件名拼接沙盒路径,直接获取该文件的属性,如果没有该文件,则返回的是nil,如果有该文件,则读取文件其中的一个属性:文件数据的长度。
<b>创建会话和可变请求,设置请求头信息,告诉服务器返回的数据从已经下载的文件长度后面开始下载,最后由会话创建请求任务,并启动任务。
<c>添加协议<NSURLSessionDataDelegate> ,设置代理,实现代理方法。
<d>在获取服务器返回的响应代理方法中获取文件名和要下载的文件长度,拼接沙盒路径,根据该路径创建输出流,开启输出流。别忘了还需要设置接收服务器响应。
<e>在获取服务器返回的数据代理方法中,不断的使用输出流将数据写入,并通过获取的数据设置进度条进度。
<f>在结束服务器请求的代理方法中,关闭输出流,释放输出流的指针。另外可能会需要打印错误信息。
<g>最后别忘了释放会话对象(两种方法均可)
2-2、源码展示:
相关文章
- iOS多线程NSThread的使用
- iOS多线程与网络开发之小文件上传
- iOS 静态类库 打包 C,C++文件及和OC混编
- iOS通过设置info.plist参数使用iTunes导入导出Documents目录下的文件
- iOS 11开发教程(六)iOS11Main.storyboard文件编辑界面
- 《iOS 8应用开发入门经典(第6版)》——第1章,第1.8节作业
- 《iOS 8案例开发大全》——实例003 通过搜索框缩小文件范围并格式化代码
- Github上关于iOS的各种开源项目集合
- iOS 字符串遍历
- ios 数据类型 types文件下常见定义 和 类 MacTypes 中的定义
- iOS 使用.xcworkspace文件管理代码和工程依赖(实现项目模块化)
- iOS、mac开源项目及库(感谢原作者的分享)
- iOS开发UI篇—CALayer简介
- iOS 音乐播放器之锁屏效果+歌词解析
- iOS开发网络篇—文件的上传
- 《iOS应用软件设计之道》—— 1.4 列出提纲时的更多输入
- iOS开发 -product文件夹下有两个相同的.app文件怎么办,该怎么删除
- iOS - WKWebView那些坑
- iOS - 利用 iTunes 接口检查 App 版本更新
- iOS开发之网络编程--4、NSURLSessionDataTask实现文件下载(离线断点续传下载) <进度值显示优化>
- iOS开发之网络编程--使用NSURLConnection实现大文件断点续传下载
- IOS之Foundation--plist简说
- IOS之UI--小实例项目--添加商品和商品名(使用xib文件终结版) + xib相关知识点总结
- IOS应用沙盒文件操作