NSURLSession断点续传

来源:互联网 发布:java 100以内的质数 编辑:程序博客网 时间:2024/05/22 16:01

.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 *)downloadTaskdidFinishDownloadingToURL:(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)totalBytesWrittentotalBytesExpectedToWrite:(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)fileOffsetexpectedTotalBytes:(int64_t)expectedTotalBytes{}
原创粉丝点击