文件分段请求(二)

上一篇好像过去好久了。。

最近得闲把上篇的下载器写完了,这里简单介绍下

项目地址

VWChaplin

实际上是对NSURLSession的一层包装

1.管理者VWChaplin拥有一个session

2.session创建出的task被管理者产出的下载任务VWChaplinSmile关联

对断点续传的支持,API层的"继续"功能

1.NSURLSessionDownloadTask支持一定的断点续传功能,取消时该任务时会提供用于下次继续的数据resumeData

支持的条件如下:

A download can be resumed only if the following conditions are met:

The resource has not changed since you first requested it

The task is an HTTP or HTTPS GET request

The server provides either the ETag or Last-Modified header (or both) in its response

The server supports byte-range requests

The temporary file hasn’t been deleted by the system in response to disk space pressure

2.主动发起的带有range参数的请求

在任务内通过记录总共的任务量和已完成的任务量,能够得到下次请求的range

3.持久化下载任务

对于app无法继续正常运行时,保留现场,将下载任务和下载文件进行存储

文件相关:

1.一次完整的请求

在下载时使用的NSURLSessionTask是NSURLSessionDownloadTask,获取文件的代理方法为:

-(void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didFinishDownloadingToURL:(NSURL *)location

方法说明是代理返回后文件将被删除,因此任务完成后需要主动移动文件到能控制的区域

2.多次继续的请求,获取每次中断请求时已下载文件

每次任务的暂停实际上是进行了取消任务的操作,任务取消是不会执行 说明1)内 的代理方法,那去哪里获取刚刚下载的文件?

线索:任务取消后,既然NSURLSessionDownloadTask能提供resumeData来继续下载,那这次task的下载数据一定是能够获取到的。

观察resumeData:存储resmueData后可以看到resumeData内是一个xml格式的存档,以key-value形式存储的相关信息,可以找到的key如下:

NSURLSessionDownloadURL
NSURLSessionResumeBytesReceived
NSURLSessionResumeCurrentRequest
NSURLSessionResumeEntityTag
NSURLSessionResumeInfoTempFileName
NSURLSessionResumeInfoVersion
NSURLSessionResumeOriginalRequest
根据filename可以从tmp目录下获取到本次下载的文件

3.任务碎片的合并

创建config文件记录了下载的完整流程中产生的所有文件(每次暂停即存储该次产生的文件)

以此合并文件即可

4.文件结构:

Main

=>Tasks=>config+fragments

=>History

=>TaskWrapper Persistence=>config

有待完善:

1.保留现场的时机

2.session与管理者的自定义配置

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值