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

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

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

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

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

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

资源URL动态变化,NSURLSession实现断点续载_第1张图片

里面的字段通俗易通。

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

代码如图:

资源URL动态变化,NSURLSession实现断点续载_第2张图片

修改了resumeData后使用

 [backgroundSession downloadTaskWithResumeData:downloadTask.resumeData];

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

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

 

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

你可能感兴趣的:(数据库,python)