iOS开发之网络编程--3、NSURLSessionDataTask实现文件下载(离线断点续传下载)

简介:

前言:使用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、源码展示:
    
相关文章
|
6月前
|
安全 网络安全 Android开发
安卓与iOS开发:选择的艺术网络安全与信息安全:漏洞、加密与意识的交织
【8月更文挑战第20天】在数字时代,安卓和iOS两大平台如同两座巍峨的山峰,分别占据着移动互联网的半壁江山。它们各自拥有独特的魅力和优势,吸引着无数开发者投身其中。本文将探讨这两个平台的特点、优势以及它们在移动应用开发中的地位,帮助读者更好地理解这两个平台的差异,并为那些正在面临选择的开发者提供一些启示。
142 56
|
6月前
|
存储 网络架构
网络速率与下载速率
【8月更文挑战第8天】
641 1
网络速率与下载速率
|
6月前
|
UED 存储 数据管理
深度解析 Uno Platform 离线状态处理技巧:从网络检测到本地存储同步,全方位提升跨平台应用在无网环境下的用户体验与数据管理策略
【8月更文挑战第31天】处理离线状态下的用户体验是现代应用开发的关键。本文通过在线笔记应用案例,介绍如何使用 Uno Platform 优雅地应对离线状态。首先,利用 `NetworkInformation` 类检测网络状态;其次,使用 SQLite 实现离线存储;然后,在网络恢复时同步数据;最后,通过 UI 反馈提升用户体验。
148 0
|
8月前
|
Python
【干货】Python下载网络小说
【干货】Python下载网络小说
网络请求和下载,ping baidu Ctrl + C停掉,wegt命令可以在命令行内下载网络文件
网络请求和下载,ping baidu Ctrl + C停掉,wegt命令可以在命令行内下载网络文件
|
7月前
|
Linux Shell 网络性能优化
Wondershaper网络限制脚本源码分析一(下载速度限制篇)
Wondershaper 是一个简单的 Linux 命令行工具,用于自动管理和控制网络接口的上行和下行带宽,旨在为用户提供稳定的网络体验,尤其是在网络拥塞的情况下。它通过 Traffic Control (tc) 工具集实现这一功能,但与直接使用 tc 相比,Wondersbaper 提供了更简洁易用的界面,特别适合没有深入网络管理知识的用户,但它其实就是由一个bash脚本组成,当然里面的思想非常精华。
138 0
|
8月前
|
文字识别 开发工具 Android开发
视觉智能开放平台操作报错合集之使用人脸属性检测接口,出现报错:图片无法下载,请检查链接是否可访问和本地网络情况,该如何解决
在使用视觉智能开放平台时,可能会遇到各种错误和问题。虽然具体的错误代码和消息会因平台而异,但以下是一些常见错误类型及其可能的原因和解决策略的概述,包括但不限于:1. 认证错误、2. 请求参数错误、3. 资源超限、4. 图像质量问题、5. 服务不可用、6. 模型不支持的场景、7. 网络连接问题,这有助于快速定位和解决问题。
|
9月前
|
数据采集 存储 数据安全/隐私保护
拓展网络技能:利用lua-http库下载www.linkedin.com信息的方法
本文介绍如何使用Lua和lua-http库抓取LinkedIn信息,强调了Lua在爬虫开发中的应用。通过配置亿牛云爬虫代理解决IP封锁问题,实现步骤包括安装库、配置代理、发送HTTP请求、解析响应及提取信息。提供的Lua代码示例展示了下载和存储LinkedIn信息的过程。实验成功展示了Lua爬虫的可行性,但也指出需考虑反爬虫策略以应对实际挑战。
拓展网络技能:利用lua-http库下载www.linkedin.com信息的方法
|
8月前
|
数据采集 JSON 程序员
老程序员分享:Pythonrequests网络数据采集下载视频(ku6)
老程序员分享:Pythonrequests网络数据采集下载视频(ku6)
54 0
|
9月前
|
机器学习/深度学习 自然语言处理 网络安全
【pkuseg】由于网络策略组织下载请求,因此直接在github中下载细分领域模型medicine
【pkuseg】由于网络策略组织下载请求,因此直接在github中下载细分领域模型medicine
90 1

热门文章

最新文章