.h文件
#import <Foundation/Foundation.h>
@interface NCNetWorkManager : NSObject <NSURLSessionDelegate, NSURLSessionDownloadDelegate, NSURLSessionDataDelegate>
@property (nonatomic, strong) NSURLSession * _Nullable session;
@property (nonatomic, strong) NSURLSessionDownloadTask * _Nullable downloadTask;
@property (nonatomic, strong) NSData * _Nullable resumeData;
/*
* 当前下载进度
*/
@property (nonatomic, assign) float rateProgress;
/**
* 断点续传下载-开始下载
*/
- (void)downloadStart:(nullable NSString *)urlString;
/**
* 断点续传下载-暂停下载
*/
- (void)downloadPause;
/**
* 断点续传下载-恢复下载
*/
- (void)downloadResume;
@end
.m文件
开始下载
- (void)downloadStart:(NSString *)urlString{
NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
self.session = [NSURLSession sessionWithConfiguration:configuration delegate:self delegateQueue:[NSOperationQueue mainQueue]];
self.downloadTask = [self.session downloadTaskWithURL:[NSURL URLWithString:urlString]];
[self.downloadTask resume];
}
暂停下载
- (void)downloadPause{
__weak typeof(self) weakSelf = self;
[self.downloadTask cancelByProducingResumeData:^(NSData * _Nullable resumeData) {
weakSelf.resumeData = resumeData;
weakSelf.downloadTask = nil;
}];
}
继续下载
- (void)downloadResume{
self.downloadTask = [self.session downloadTaskWithResumeData:self.resumeData];
[self.downloadTask resume];
self.resumeData = nil;
}
下载完成后(代理方法)
- (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask
didFinishDownloadingToURL:(NSURL *)location{
NSString *caches = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
NSString *path = [caches stringByAppendingPathComponent:downloadTask.response.suggestedFilename];
NSFileManager *fileManager = [NSFileManager defaultManager];
[fileManager moveItemAtPath:location.path toPath:path error:nil];
}
获得下载进度(代理方法)
- (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask
didWriteData:(int64_t)bytesWritten
totalBytesWritten:(int64_t)totalBytesWritten
totalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite{
NSLog(@"获得下载进度--%@", [NSThread currentThread]);
self.rateProgress = totalBytesExpectedToWrite/totalBytesWritten;
}
下载任务已恢复下载(代理方法)
如果一个可恢复的下载任务被取消或失败,你可以请求一个resumeData对象提供足够的信息来重新启动下载. 然后你就可以调用
downloadTaskWithResumeData:
或downloadTaskWithResumeData:completionHandler:
方法
当你调用这些方法时,你将得到一个新的下载任务。一旦恢复该任务,会话将调用其委托的URLSession:downloadTask:didResumeAtOffset:expectedTotalBytes
方法, 这个新任务恢复下载.
- (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask
didResumeAtOffset:(int64_t)fileOffset
expectedTotalBytes:(int64_t)expectedTotalBytes{
}