.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.rate
Progress = total
BytesExpectedToWrite/total
BytesWritten;
}
下载任务已恢复下载(代理方法)
如果一个可恢复的下载任务被取消或失败,你可以请求一个resumeData对象提供足够的信息来重新启动下载. 然后你就可以调用downloadTaskWithResumeData: 或downloadTaskWithResumeData:completionHandler:方法 当你调用这些方法时,你将得到一个新的下载任务。一旦恢复该任务,会话将调用其委托的URLSession:downloadTask:didResumeAtOffset:expectedTotalBytes方法, 这个新任务恢复下载.
- (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask
didResumeAtOffset:(int64_t)fileOffset
expectedTotalBytes:(int64_t)expectedTotalBytes{
}