NSURLSession下载(断点续传)

来源:互联网 发布:网络彩票何时开售 编辑:程序博客网 时间:2024/05/22 13:53
////  ViewController.m#import "ViewController.h"@interface ViewController ()<NSURLSessionDownloadDelegate>/**下载任务*/@property(nonatomic,strong)NSURLSessionDownloadTask *downloadTask;/**全局管理的会话*/@property(nonatomic,strong)NSURLSession *session;/**续传的数据*/@property(nonatomic,strong)NSData *resumeData;@end@implementation ViewController- (NSURLSession *)session{    if (_session == nil) {                NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration];        _session = [NSURLSession sessionWithConfiguration:config delegate:self delegateQueue:nil];    }    return _session;}/**继续*/- (IBAction)resume:(id)sender{    if (self.resumeData == nil) {        NSLog(@"没有续传的数据");        return;    }        // 使用上一次的记录,新建一个下载任务    self.downloadTask =  [self.session downloadTaskWithResumeData:self.resumeData];        // 一旦任务建立完成,之前的续传数据没有用,释放掉    self.resumeData = nil;        [self.downloadTask resume];}/**暂停*/- (IBAction)pause:(id)sender{    NSLog(@"%s", __func__);        [self.downloadTask cancelByProducingResumeData:^(NSData *resumeData) {                NSLog(@"=----%tu", resumeData.length);                // 保存起来暂停的时候的字节数        self.resumeData = resumeData;                // 释放下载任务        self.downloadTask = nil;    }];}- (IBAction)start {        // 1. url    NSString *urlStr = @"http://127.0.0.1/01-课程概述.mp4";    urlStr = [urlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];        NSURL *url = [NSURL URLWithString:urlStr];        // 2. 通过session对象 开始一个任务    self.downloadTask = [self.session downloadTaskWithURL:url];       // 继续    [self.downloadTask resume];}#pragma mark - NSURLSessionDownloadDelegate// 1. 下载完成被调用的方法  iOS 7 & iOS 8都必须实现- (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didFinishDownloadingToURL:(NSURL *)location{    NSLog(@"下载完成..");        self.downloadTask = nil;}// 2. 下载进度变化的时候被调用的。 iOS 8可以不实现/** bytesWritten:     本次写入的字节数 totalBytesWritten:已经写入的字节数(目前下载的字节数) totalBytesExpectedToWrite: 总的下载字节数(文件的总大小) */- (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didWriteData:(int64_t)bytesWritten totalBytesWritten:(int64_t)totalBytesWritten totalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite{    float progress = (float)totalBytesWritten / totalBytesExpectedToWrite;    NSLog(@"%f---%@", progress, [NSThread currentThread]);}// 3. 断点续传的时候,被调用的。一般什么都不用写 iOS 8可以不实现- (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didResumeAtOffset:(int64_t)fileOffset expectedTotalBytes:(int64_t)expectedTotalBytes{    }@end

0 0