前言:使用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开发之网络编程--3、NSURLSessionDataTask实现文件下载(离线断点续传下载)的更多相关文章

  1. iOS开发之网络编程--使用NSURLConnection实现大文件断点续传下载+使用输出流代替文件句柄

    前言:本篇讲解,在前篇iOS开发之网络编程--使用NSURLConnection实现大文件断点续传下载的基础上,使用输出流代替文件句柄实现大文件断点续传.    在实际开发中,输入输出流用的比较少,但 ...

  2. iOS开发之网络编程--4、NSURLSessionDataTask实现文件下载(离线断点续传下载) <进度值显示优化>

    前言:根据前篇<iOS开发之网络编程--2.NSURLSessionDownloadTask文件下载>或者<iOS开发之网络编程--3.NSURLSessionDataTask实现文 ...

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

    本文内容大纲: 1.回顾NSURLSessionTask 2.NSURLSessionDownloadTask大文件之block下载 3.NSURLSessionDownloadTask大文件之代理方 ...

  4. iOS开发之网络编程--使用NSURLConnection实现大文件下载

    主要思路(实现下载数据分段写入缓存中) 1.使用NSURLConnectionDataDelegate以及代理方法.2.在成功获取响应的代理方法中,获得沙盒全路径,并在该路径下创建空文件和文件句柄.3 ...

  5. iOS开发之网络编程--5、NSURLSessionUploadTask+NSURLSessionDataDelegate代理上传

    前言:关于NSURLSession的主要内容快到尾声了,这里就讲讲文件上传.关于文件上传当然就要使用NSURLSessionUploadTask,这里直接讲解常用的会和代理NSURLSessionDa ...

  6. iOS开发之网络编程--使用NSURLConnection实现文件上传

    前言:使用NSURLConnection实现文件上传有点繁琐.    本文并没有介绍使用第三方框架上传文件. 正文: 这里先提供用于编码测试的接口:http://120.25.226.186:3281 ...

  7. iOS开发之网络编程--小文件下载

    文件下载方式: 如果下载的文件比较小,下载方式: 直接用NSData的 +(id)dataWithContentsOfURL:(NSURL*)url; 利用NSURLConnection发送一个HTT ...

  8. IOS开发之网络编程--文件压缩和解压缩

    前言: QQ表情包就用到了解压缩,从网络下载的那么多表情文件格式并不是一个一个图片文件,而是多个图片压缩而成的表情压缩包.下面介绍的是iOS开发中会用到的压缩和解压缩的第三方框架的使用. 注意: 这个 ...

  9. iOS开发之网络编程--XCode7 更新以来需要手动设置的内容

    XCode7 更新以来,默认是不允许加载一些http网络请求,是因为现在网络大部分使用更安全的https协议头. 所以,iOS网络编程如果出现请求无效,事先考虑是否设置一下了以下操作:

随机推荐

  1. spring 配置多个数据源的文件

    <?xml version="1.0" encoding="UTF-8"?><!-- Repository and Service layer ...

  2. 字符编码(ASCII,Unicode和UTF-8) 和 大小端

    本文包括2部分内容:“ASCII,Unicode和UTF-8” 和 “Big Endian和Little Endian”. 第1部分 ASCII,Unicode和UTF-8 介绍 1. ASCII码 ...

  3. Android 学习笔记之ContentProvider实现数据共享....

    PS:最近听老师说打算让我参与企业的app制作,让我加快学习的进度...好吧,貌似下周还有考试...貌似实验室这个app也要做...暂时不管了...那就只能加快进度了,感觉略微的有点激动和紧张,总算是 ...

  4. 分享几个cocos2dx的小游戏

    先上几个自己写的,因为最近要用cocos2dx,所以就边学边开发几个小游戏玩玩,有捕鱼,连连看,还有打地鼠!都不算完整的项目,不过拿来学习还是可以的,或者在基础上再二次开发,扩展自己! 1:捕鱼的 先 ...

  5. 关于JQUERY操作XML问题!

    使用JQUERY操作XML方法: 1.$.get(”xml文件路径",function(data){}); 2.$.Post(”xml文件路径",function(data){}) ...

  6. IIS Express魔法堂:解除localhost域名的锁定

    一.前言   单点登录是通过域名从cookie中获取登录信息,然后再根据cookie的键值对获取用户信息.但由于通过IIS Express调试应用时默认使用localhost作为域名且无法直接修改,导 ...

  7. Sql Server来龙去脉系列之一 目录篇

    从工作一直到现在都没怎么花功夫深入学习下Sql Server数据库,在使用Sql Server时90%的时间基本上都是在接触T-SQL,所以数据库这块基本上属于菜鸟级别.至于数据库的底层框架以及运行机 ...

  8. Android中的消息通知(NotificationManager和Notification)

    下面来谈谈notification,这个notification一般用在电话,短 信,邮件,闹钟铃声,在手机的状态栏上就会出现一个小图标,提示用户处理这个通知,这时手从上方滑动状态栏就可以展开并处理这 ...

  9. sql: sq_helptext

    --查看表生成脚本 sql server     --- '\r'是回车,'\n'是换行  /t相当于键盘的Tab键    --- 操作系统的不同,换行符操也不同:/r Mac /n Unix/Lin ...

  10. java多线程(一)——线程安全的单例模式

    概念: java中单例模式是一种常见的设计模式,单例模式分三种:懒汉式单例.饿汉式单例.登记式单例三种. 单例模式有一下特点: 1.单例类只能有一个实例. 2.单例类必须自己创建自己的唯一实例. 3. ...