下载此文档

iOS开发网络编程之断点续传.doc


文档分类:IT计算机 | 页数:约7页 举报非法文档有奖
1/7
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/7 下载此文档
文档列表 文档介绍
iOS开发网络编程之断点续传
在下载较大的文件的时候,一次不能下载完毕,这就需要用到断点续传,那么在IOS开发中该如何实现呢,下面跟着小编一起通过本文来学习下。
前言
网络下载是我们在项目中经常要用到的功能,如果是小文件的下载,比如图片和文字之类的,我们可以直接请求源地址,然后一次下载完毕。但是如果是下载较大的音频和视频文件,不可能一次下载完毕,用户可能下载一段时间,关闭程序,回家接着下载。这个时候,就需要实现断点续传的功能。让用户可以随时暂停下载,下次开始下载,还能接着上次的下载的进度。
今天我们来看看如何自己简单的封装一个断点续传的类,实现如下功能。
,同时可以获取下载的进度。
,可以获取文件存储的位置
,给出失败的原因
,下次开始下载,接着上次的进度继续下载
原理讲解
要实现断点续传的功能,通常都需要客户端记录下当前的下载进度,并在需要续传的时候通知服务端本次需要下载的内容片段。
(RFC2616)中定义了断点续传相关的HTTP头的Range和Content-Range字段,一个最简单的断点续传实现大概如下:
,已经下载了其中512K
,客户端请求续传,因此需要在HTTP头中申明本次需要续传的片段:Range:bytes=512000-这个头通知服务端从文件的512K位置开始传输文件
,从文件的512K位置开始传输,并且在HTTP头中增加:Content-Range:bytes 512000-/1024000并且此时服务端返回的HTTP状态码应该是206,而不是200。
难点说明
1. 客户端如何获取已经下载的文件字节数
客户端这边,我们需要记录下每次用户每次下载的文件大小,然后实现原理讲解中步骤1的功能。
那么如何记载呢?
其实我们可以直接获取指定路径下文件的大小,iOS已经提供了相关的功能,实现代码如下,
?
1 [[[NSFileManager defaultManager] attributesOfItemAtPath: FileStorePath error:nil][NSFileSize] integerValue]

上一步,我们获取了已经下载文件的字节数,这里我们需要获取被下载文件的总字节数,有了这两个值,我们就可以算出下载进度了。
那么如何获取呢?这里我们需要用到http 头部的conten-length字段,先来看看该字段的含义
Content-Length用于描述HTTP消息实体的传输长度the transfer-length of the message-body。在HTTP协议中,消息实体长度和消息实体的传输长度是有区别,比如说gzip压缩下,消息实体长度是压缩前的长度,消息实体的传输长度是gzip压缩后的长度。
简单点说,content-length表示被下载文件的字节数。
对比原理讲解的第三步,我们可以看到如果要计算出文件的总字节数,那么必须把已经下载的字节数加上 content-length。
我们需要把每个被下载文件的总字节数存储起来,这里我们选择使用pli

iOS开发网络编程之断点续传 来自淘豆网m.daumloan.com转载请标明出处.

相关文档 更多>>
非法内容举报中心
文档信息
  • 页数7
  • 收藏数0 收藏
  • 顶次数0
  • 上传人w447750
  • 文件大小78 KB
  • 时间2017-10-19
最近更新