资源URL动态变化,NSURLSession实现断点续载

本文介绍了解决iOS应用中因资源URL变动而导致的下载任务无法继续的问题。通过修改NSURLSession下载任务的resumeData中的资源URL信息,实现了断点续传功能。

iOS原生封装的NSURLSession能满足文件资源的上传下载任务功能,同时提供系统级别的支持,比如支持后台进行下载,设置进行下载的网络类型判断等等

然而使用过程中会遇到一个资源URL每次请求可能服务器返回的都不一样的问题

问题场景:APP下载一个任务,并把该任务记录到本地数据库,当APP重启时,从本地数据库恢复任务,但此时再请求资源时,因为资源的URL变化导致继续下载失败。

解决方法:通过对下载任务的跟踪,下载时NSURLSession会在应用目录的tmp文件夹中生成CFNetworkDownload前缀的下载资源缓存文件,并且能通过任务的cancelByProducingResumeData获取resumeData数据,resumeData主要记录任务的各种信息,如资源链接地址,下载进度跟时间。所以当资源URL改变时,即需要修改resumeData里面的资源信息,resumeData是plist文件,内容格式如图所示:

里面的字段通俗易通。

所以在下载需要恢复任务时,对resumeData里面的资源url信息进行修改,从而达到断点续载的效果。

代码如图:

修改了resumeData后使用

 [backgroundSession downloadTaskWithResumeData:downloadTask.resumeData];

即可继续进行之前下载中的任务了。

(P.S 在下载过程中注意在关键点保存资源文件跟resumeData文件到Document文件夹,因为tmp文件夹在存储空间不足时会给回收)

 

转载于:https://my.oschina.net/gdxz111/blog/1142848

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值