断点续传

作者: 路灯下的黑猫 | 来源:发表于2018-08-24 14:36 被阅读0次

@interface ViewController ()

@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];

}

#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.taskresume];

}

/*暂停的点击方法 **/

- (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.taskresume];

    // 清空

    self.resumeData = nil;

}

#pragma mark - NSURLSessionDownloadDelegate

/*下载完成的回调**/

- (void)URLSession:(NSURLSession*)session

      downloadTask:(NSURLSessionDownloadTask*)downloadTask

didFinishDownloadingToURL:(NSURL*)location {

    NSString *caches = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];

    // response.suggestedFilename : 建议使用的文件名,一般跟服务器端的文件名一致

    NSString*file = [cachesstringByAppendingPathComponent:downloadTask.response.suggestedFilename];

    // 将临时文件剪切或者复制Caches文件夹

    NSFileManager *mgr = [NSFileManager defaultManager];

    // AtPath : 剪切前的文件路径

    // ToPath : 剪切后的文件路径

    [mgrmoveItemAtPath:location.pathtoPath:fileerror:nil];

}

/* 下载进度的回调 **/

- (void)URLSession:(NSURLSession*)session

      downloadTask:(NSURLSessionDownloadTask*)downloadTask

      didWriteData:(int64_t)bytesWritten

 totalBytesWritten:(int64_t)totalBytesWritten

totalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite {

    NSLog(@"获得下载进度--%@", [NSThreadcurrentThread]);

    // 获得下载进度

    self.progressView.progress= (double)totalBytesWritten / totalBytesExpectedToWrite;

}

/* 恢复下载的回调,从哪里开始下载**/

- (void)URLSession:(NSURLSession*)session

      downloadTask:(NSURLSessionDownloadTask*)downloadTask

 didResumeAtOffset:(int64_t)fileOffset

expectedTotalBytes:(int64_t)expectedTotalBytes {

    NSLog(@"fileOffset = %lld",fileOffset);

}

- (void)didReceiveMemoryWarning {

    [super didReceiveMemoryWarning];

    // Dispose of any resources that can be recreated.

}

相关文章

  • Android-单线程断点续传

    断点续传的原理 看上一篇Android-断点续传 下面的例子是下载的断点续传,断点续传很简单就两点:1.网络请求的...

  • ios 后台下载,断点续传总结

    断点续传 demo 断点续传的原理是在HTTP1.1协议(RFC2616)中定义了断点续传相关的HTTP头的Ran...

  • Okhttp多线程断点续传

    目录 1、断点续传相关定义2、多线程下载实现方案 1、断点续传相关定义 1.1、断点续传: 记录上次下载的位置,下...

  • NSURLSession实现断点下载

    断点续传概述 断点续传就是从文件上次中断的地方开始重新下载或上传数据,而不是从文件开头。(本文的断点续传仅涉及下载...

  • 多线程断点

    Android多线程断点续传下载 原理 其实断点续传的原理很简单,从字面上理解,所谓断点续传就是从停止的地方重新下...

  • IOS 断点续传原理浅析(第一篇)

    断点续传概述: 断点续传就是从文件上次中断的地方开始重新下载或上传数据,当下载大文件的时候,如果没有实现断点续传功...

  • iOS-16 断点续传 下载

    断点续传概述: 断点续传就是从文件上次中断的地方开始重新下载或上传数据,当下载大文件的时候,如果没有实现断点续传功...

  • android 中断点续传

    android 中断点续传 单线程断点续传 所谓的断点续传就是在下载一个文件时,文件没有完全下载,中途暂停,那么再...

  • Android断点下载小结

    前言 断点续传是一个很传统的话题;现在但凡包含下载功能的软件,大部分都会有断点续传的功能;因此对于断点续传的实现,...

  • Android-多线程断点续传

    简介 多线程断点续传便是在单线程的断点续传上延伸的。多线程断点续传是把整个文件 分割成几个部分,每个部分由一条线程...

网友评论

    本文标题:断点续传

    本文链接:https://www.haomeiwen.com/subject/xgwbiftx.html