NSURLSession断点续传

xiaoxiao2021-02-28  30

.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{ }
转载请注明原文地址: https://www.6miu.com/read-750019.html

最新回复(0)