NSURLSession断点续传

.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{

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值