博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于NSURLSessionDownloadTask下载大文件
阅读量:4659 次
发布时间:2019-06-09

本文共 2542 字,大约阅读时间需要 8 分钟。

/**

 下载文件

 */

@interface DownloadFileItem : NSObject

 

 

- (id)initWithDownloadFile:(NSString *)path;

 

/**

 暂停下载,可以恢复

 */

- (void)suspend;

 

/**

 取消,不可以恢复

 */

- (void)cancel;

 

/**

 开始下载

 */

- (void)start;

 

@end

 

@interface DownloadFileItem () <NSURLSessionDownloadDelegate>

 

/**

 下载任务

 */

@property (nonatomic, strong) NSURLSessionDownloadTask *downloadTask;

 

/**

 下载的数据信息

 */

@property (nonatomic, strong) NSData *resumeData;

 

/**

 下载的会话

 */

@property (nonatomic, strong) NSURLSession *session;

 

@end

 

@implementation DownloadFileItem

 

- (id)initWithDownloadFile:(NSString *)path

{

    if (self = [super init])

    {

        self.session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration] delegate:self delegateQueue:[NSOperationQueue mainQueue]];

        NSURL *url = [NSURL URLWithString:path];

        self.downloadTask = [self.session downloadTaskWithURL:url];

    }

    return self;

}

 

 

/**

 暂停下载,可以恢复

 */

- (void)suspend

{

    [self.downloadTask suspend];

}

 

/**

 取消,不可以恢复

 */

- (void)cancel

{

    [self.downloadTask cancelByProducingResumeData:^(NSData * _Nullable resumeData) {

        self.resumeData = resumeData;

    }];

}

 

/**

 开始下载

 */

- (void)start

{

    if (_resumeData)

    {

        NSURLSessionDownloadTask *downloadTask = [_session downloadTaskWithResumeData:_resumeData];

        self.downloadTask = downloadTask;

    }

    [self.downloadTask resume];

}

 

 

#pragma mark NSURLSessionDownloadDelegate

// 下载了数据的过程中会调用的代理方法

- (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didWriteData:(int64_t)bytesWritten totalBytesWritten:(int64_t)totalBytesWritten totalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite

{

    NSLog(@"%1f", 1.0 * totalBytesWritten / totalBytesExpectedToWrite);

}

 

// 重新恢复下载的代理方法

- (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didResumeAtOffset:(int64_t)fileOffset expectedTotalBytes:(int64_t)expectedTotalBytes

{

    

}

 

// 写入数据到本地的时候会调用的方法

- (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didFinishDownloadingToURL:(NSURL *)location

{

    NSString *fullPath = [[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:downloadTask.response.suggestedFilename];

    [[NSFileManager defaultManager] moveItemAtURL:location toURL:[NSURL fileURLWithPath:fullPath] error:nil];

    NSLog(@"fullPath=%@", fullPath);

}

 

// 请求完成,错误的时候调用

- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error

{

    

}

 

 

 

@end

 

转载于:https://www.cnblogs.com/tangbin604/p/6305452.html

你可能感兴趣的文章
bzoj3238:[Ahoi2013]差异
查看>>
Easy-ARM IMX283 移植RTL8192CU驱动
查看>>
javascript-装饰者模式
查看>>
最近的几个任务
查看>>
去哪儿网2015校园招聘产品经理笔试(时间:2014-9-23)
查看>>
java默认继承
查看>>
关闭 禁用 Redis危险命令
查看>>
三年工作总结
查看>>
MySQL数据库实验:任务二 表数据的插入、修改及删除
查看>>
asp.net网站前台通过DataList展示信息的代码
查看>>
【SAS ADVANCE】Performing Queries Using PROC SQL
查看>>
Hive新功能 Cube, Rollup介绍
查看>>
webpack:(模块打包机)
查看>>
程序员不得不知的座右铭(世界篇)
查看>>
表格-鼠标经过单元格变色(暂不支持IE6)
查看>>
【每日一学】pandas_透视表函数&交叉表函数
查看>>
实时读取日志文件
查看>>
【寒假集训系列2.12】
查看>>
2018牛客多校第六场 I.Team Rocket
查看>>
Vuex了解
查看>>