NSURLSessionDownloadTask 下载/断点下载
来源:互联网 发布:凤城雨婷网络 编辑:程序博客网 时间:2024/04/30 06:33
实现协议NSURLSessionDownloadDelegate的2个方法
此方法主要返回文件的字节数以及已下载的字节数
- (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didWriteData:(int64_t)bytesWritten totalBytesWritten:(int64_t)totalBytesWritten totalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite;
储存的零时文件路径location
- (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didFinishDownloadingToURL:(NSURL *)location;
样式图,由于网速太快,手速跟不上,加载图片太快没来得及点击暂停下载以及就加载出来了,大家如果想实现可以把路径改为一个大一点的文件,这样就能看的很明显了。
代码实现
#import "ViewController.h"@interface ViewController () <NSURLSessionDownloadDelegate>@property (weak, nonatomic) IBOutlet UIImageView *loadImage;@property (weak, nonatomic) IBOutlet UIProgressView *progress;@property (weak, nonatomic) IBOutlet UILabel *loadPlan;@property (weak, nonatomic) IBOutlet UIButton *loadTitle;@property (nonatomic, strong) NSData *data;@property (nonatomic, strong) NSURLSession *session;@property (nonatomic, strong) NSURLSessionDownloadTask *task;@property (nonatomic, assign) BOOL judgeDown;@end@implementation ViewController- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib.}- (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated.}/** * 下载的字节 * * @param session session * @param downloadTask taskdownload * @param bytesWritten 每次下载的字节 * @param totalBytesWritten 已下载的字节 * @param totalBytesExpectedToWrite 总字节 */- (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didWriteData:(int64_t)bytesWritten totalBytesWritten:(int64_t)totalBytesWritten totalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite{ //进度条计算 CGFloat progress = (totalBytesWritten*1.0)/totalBytesExpectedToWrite; //异步添加到主队列下载 dispatch_async(dispatch_get_main_queue(), ^{ _progress.progress = progress; _loadPlan.text = [NSString stringWithFormat:@"开始下载:%d/100",(int)(progress*100)]; }) ;}/** * NSURLSessionDownloadDelegate委托协议 * * @param session session * @param downloadTask sessiontask * @param location 储存的零时文件路径 */- (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didFinishDownloadingToURL:(NSURL *)location{ NSFileManager *manager = [NSFileManager defaultManager]; //获取document目录 NSString *strDocument = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).lastObject; //在原有路径上添加路径 NSString *strURL = [strDocument stringByAppendingPathComponent:@"1250538257738.jpg"]; //本地URL路径 NSURL *url = [NSURL fileURLWithPath:strURL]; if ([manager fileExistsAtPath:strURL]) { [manager removeItemAtPath:strURL error:nil]; } //把tem文件移动指定的URL路径上 if ([manager moveItemAtURL:location toURL:url error:nil]) { _data = [manager contentsAtPath:strURL]; _loadImage.image = [UIImage imageWithData:_data]; }}- (IBAction)onClick:(id)sender { NSString *strURL = @"http://img.pconline.com.cn/images/bbs4/20098/18/1250538257738.jpg"; NSURL *url = [NSURL URLWithString:strURL]; //创建config对象 NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration]; //创建session对象,并添加到主队列中 _session = [NSURLSession sessionWithConfiguration:configuration delegate:self delegateQueue:[NSOperationQueue mainQueue]]; //下载路径 _task = [_session downloadTaskWithURL:url]; [_task resume];}- (IBAction)suspendLoad:(id)sender { if (_judgeDown) { NSLog(@"恢复下载"); _loadTitle.titleLabel.text = @"暂停下载"; if(!_data){ NSURL *url = [NSURL URLWithString:@"http://img.pconline.com.cn/images/bbs4/20098/18/1250538257738.jpg"];// _request = [NSURLRequest requestWithURL:url];// _task = [_session downloadTaskWithRequest:_request]; _task = [_session downloadTaskWithURL:url]; }else{ _task = [_session downloadTaskWithResumeData:_data]; } [_task resume]; }else{ NSLog(@"暂停下载"); _loadTitle.titleLabel.text = @"恢复下载"; //取消下载并调用回调与恢复数据供以后使用 [_task cancelByProducingResumeData:^(NSData *resumeData) { _data = resumeData; }]; _task = nil; _judgeDown = YES; }}@end
0 0
- NSURLSessionDownloadTask 下载/断点下载
- NSURLSessionDownloadTask 断点下载
- 【iOS开发-网络】使用NSURLSessionDownloadTask断点下载
- 系统NSURLSessionDownloadTask实现简单的断点下载
- iOS开发网络篇 一一 NSURLSessionDownloadTask实现断点下载
- NSURLSessionDownloadTask下载文件
- NSURLSessionDownloadTask下载内容
- NSURLSessionDownloadTask(下载任务)
- NSURLSessionDownloadTask下载图片
- NSURLSessionDownloadTask文件下载
- NSURLSession(四)NSURLSessionDownloadTask下载任务
- 网络编程05-通过NSURLSessionDownloadTask来下载
- 通过NSURLSessionDownloadTask代理实现下载大文件
- 断点下载
- 断点下载
- 断点下载
- 断点下载
- 多线程下载断点下载
- LeetCode 141 -Linked List Cycle ( JAVA )
- eclipse无法部署程序到android设备中
- 数组去重-数组塌陷的解决方法
- js中(function(){…})()立即执行函数写法理解
- HDU 1008 Elevator(模拟题)
- NSURLSessionDownloadTask 下载/断点下载
- SpringMVC整合Redis 出现 afterPropertiesSet signature: ()V) Incompatible argument to function 解决办法
- 基于Redis实现分布式锁-Redisson使用及源码分析
- 优秀的程序员不会觉得累成狗是一种荣耀
- ubuntu下用mysql源码安装
- AOPR七问七答
- Android源码研究Start——为什么我想研究Android源码。
- os模块及os.path模块的应用举例
- OpenCV学习笔记(十六)——CamShift研究 OpenCV学习笔记(十七)——运动分析和物体跟踪Video OpenCV学习笔记(十八)——图像的各种变换(cvtColor*+)imgproc