关于NSURLSession在下载失败后的断点续传
2017-01-21 22:18
141 查看
关于NSURLSession下载文件时的断点续传,网上相关文章有很多,但都是主动暂停下载任务时断点续传的方法,没有提到过下载失败的情况,其实很简单,代码如下:
在下载出错的错误回调中
使用如下代码获得用来做恢复的NSData
再在下次任务开始时使用如下代码做恢复即可
顺带着也贴下主动暂停时,获得用来做恢复NSData的代码
另外NSURLSession是否可以断点续传,有如下一些限制
The response must contain an ETag or Last-Modified header.
I think the response must also contain an Accept-Ranges: bytes header
The temporary file must still exist (not low on disk space).
It must be an HTTP or HTTPS request.
The Last-Modified or ETag header must indicate that the file hasn't changed since it was last requested.
翻一下
1. Server的response header中必须包含ETag或Last-Modified字段
2. Server的response header必须包含Accept-Ranges字段
3. 曾经下载过的临时文件需要保留
4. 必须是HTTP或者HTTPS请求
5. 临时文件需要匹配Last-Modified或ETag字段
在下载出错的错误回调中
- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(nullable NSError *)error
使用如下代码获得用来做恢复的NSData
NSData* resumeData = error.userInfo[NSURLSessionDownloadTaskResumeData];
再在下次任务开始时使用如下代码做恢复即可
NSURLSessionConfiguration * config = [NSURLSessionConfiguration defaultSessionConfiguration]; NSURLSession *session = [NSURLSession sessionWithConfiguration:config delegate:self delegateQueue:nil]; NSURLSessionDownloadTask *task = [session downloadTaskWithResumeData:resumeData]; [task resume]
顺带着也贴下主动暂停时,获得用来做恢复NSData的代码
- (void)cancelDownload { __weak typeof(self) wSelf = self; [_task cancelByProducingResumeData:^(NSData * _Nullable resumeData) { //storage resumeData }]; }
另外NSURLSession是否可以断点续传,有如下一些限制
The response must contain an ETag or Last-Modified header.
I think the response must also contain an Accept-Ranges: bytes header
The temporary file must still exist (not low on disk space).
It must be an HTTP or HTTPS request.
The Last-Modified or ETag header must indicate that the file hasn't changed since it was last requested.
翻一下
1. Server的response header中必须包含ETag或Last-Modified字段
2. Server的response header必须包含Accept-Ranges字段
3. 曾经下载过的临时文件需要保留
4. 必须是HTTP或者HTTPS请求
5. 临时文件需要匹配Last-Modified或ETag字段
相关文章推荐
- 关于ubuntu“下载软件仓库信息失败 检查您的网络连接“问题的解决办法
- 关于安卓sdk开发环境的的更新-Android SDK下载和更新失败
- IOS开发—网络请求、上传下载、断点续传(NSURLSession)
- NSURLSession下载文件—断点续传
- 关于ftp和http下载断点续传
- 关于导致 N70 下载jad安装程序, 出现 "授权失败" 的错误
- 关于iOS的后台下载和断点续传,说一说自己的理解
- 关于 NSURLSession 的上传和下载
- NSURLSession下载(断点续传)
- 关于maven下载jar包失败的问题的总结和解决
- 关于NSURLSession的上传和下载
- NSURLSession下载和断点续传
- NSURLSession下载和断点续传
- iOS 【NSURLSession 下载文件(解决内存飙升/句柄指针/离线断点续传)】
- iOS - NSURLSession实现断点续传下载
- 关于ubuntu下载软件仓库信息失败,请检查网络连接 的解决方案
- 关于NSURLSession的上传和下载
- 关于NSURLSession的上传和下载
- 使用 NSURLSession 开发一个支持后台下载和断点续传的下载工具
- iOS开发下载、断点续传-NSURLConnection、NSURLSession