//
// 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
NSURLSession下载(断点续传)
最新推荐文章于 2022-03-16 09:29:24 发布