断点续传

来源:互联网 发布:spss mac版 pc6 编辑:程序博客网 时间:2024/06/03 21:08
////  ViewController.m//  断点续传////  Created by apple on 16/5/31.//  Copyright © 2016年 李重阳. All rights reserved.//#import "ViewController.h"@interface ViewController ()<NSURLSessionDelegate>@property (weak, nonatomic) IBOutlet UIProgressView *progressView;/* 下载文件的工具 **/@property (nonatomic, strong) NSURLSessionDownloadTask *task;@property (nonatomic, strong) NSData *resumeData;@property (nonatomic, strong) NSURLSession *session;@end@implementation ViewController- (void)viewDidLoad {    [super viewDidLoad];    // Do any additional setup after loading the view, typically from a nib.}#pragma mark - set/get 方法- (NSURLSession *)session {    if (_session == nil) {        NSURLSessionConfiguration * config = [NSURLSessionConfiguration defaultSessionConfiguration];        _session = [NSURLSession sessionWithConfiguration:config delegate:self delegateQueue:[NSOperationQueue mainQueue]];    }    return _session;}/*开始下载的方法**/- (IBAction)downLoad:(id)sender {    // 1.创建一个下载任务    NSURL *url = [NSURL URLWithString:@"http://weixue.steptowin.com:8000/data/img/20160411/veuyytthy4b2_320_200.jpg"];    self.task = [self.session downloadTaskWithURL:url];    // 2.开始任务    [self.task resume];}/*暂停的点击方法 **/- (IBAction)pause:(id)sender {    __weak typeof(self) vc = self;    [self.task cancelByProducingResumeData:^(NSData *resumeData) {        //  resumeData : 包含了继续下载的开始位置\下载的url        vc.resumeData = resumeData;        vc.task = nil;    }];}/* 恢复的点击方法 **/- (IBAction)resume:(id)sender {    // 传入上次暂停下载返回的数据,就可以恢复下载    self.task = [self.session downloadTaskWithResumeData:self.resumeData];    // 开始任务    [self.task resume];    // 清空    self.resumeData = nil;}#pragma mark - NSURLSessionDownloadDelegate/*下载完成的回调**/- (void)URLSession:(NSURLSession *)session      downloadTask:(NSURLSessionDownloadTask *)downloadTaskdidFinishDownloadingToURL:(NSURL *)location {    NSString *caches = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];    // response.suggestedFilename : 建议使用的文件名,一般跟服务器端的文件名一致    NSString *file = [caches stringByAppendingPathComponent:downloadTask.response.suggestedFilename];    // 将临时文件剪切或者复制Caches文件夹    NSFileManager *mgr = [NSFileManager defaultManager];    // AtPath : 剪切前的文件路径    // ToPath : 剪切后的文件路径    [mgr moveItemAtPath:location.path toPath:file error:nil];}/* 下载进度的回调 **/- (void)URLSession:(NSURLSession *)session      downloadTask:(NSURLSessionDownloadTask *)downloadTask      didWriteData:(int64_t)bytesWritten totalBytesWritten:(int64_t)totalBytesWrittentotalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite {    NSLog(@"获得下载进度--%@", [NSThread currentThread]);    // 获得下载进度    self.progressView.progress = (double)totalBytesWritten / totalBytesExpectedToWrite;}/* 恢复下载的回调,从哪里开始下载**/- (void)URLSession:(NSURLSession *)session      downloadTask:(NSURLSessionDownloadTask *)downloadTask didResumeAtOffset:(int64_t)fileOffsetexpectedTotalBytes:(int64_t)expectedTotalBytes {    NSLog(@"fileOffset = %lld",fileOffset);}- (void)didReceiveMemoryWarning {    [super didReceiveMemoryWarning];    // Dispose of any resources that can be recreated.}@end
0 0
原创粉丝点击