使用NSURLSessionDataTask实现大文件离线断点下载(完整)
Posted iFat的笔记本
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用NSURLSessionDataTask实现大文件离线断点下载(完整)相关的知识,希望对你有一定的参考价值。
(1)关于NSOutputStream的使用
//1. 创建一个输入流,数据追加到文件的屁股上
//把数据写入到指定的文件地址,如果当前文件不存在,则会自动创建
NSOutputStream *stream = [[NSOutputStream alloc]initWithURL:[NSURL fileURLWithPath:[self fullPath]] append:YES];
//2. 打开流
[stream open];
//3. 写入流数据
[stream write:data.bytes maxLength:data.length];
//4.当不需要的时候应该关闭流
[stream close];
(2)关于网络请求请求头的设置(可以设置请求下载文件的某一部分)
//1. 设置请求对象
//1.1 创建请求路径
NSURL *url = [NSURL URLWithString:@"http://120.25.226.186:32812/resources/videos/minion_01.mp4"];
//1.2 创建可变请求对象
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
//1.3 拿到当前文件的残留数据大小
self.currentContentLength = [self FileSize];
//1.4 告诉服务器从哪个地方开始下载文件数据
NSString *range = [NSString stringWithFormat:@"bytes=%zd-",self.currentContentLength];
NSLog(@"%@",range);
//1.5 设置请求头
[request setValue:range forHTTPHeaderField:@"Range"];
(3)NSURLSession对象的释放
-(void)dealloc
{
//在最后的时候应该把session释放,以免造成内存泄露
// NSURLSession设置过代理后,需要在最后(比如控制器销毁的时候)调用session的invalidateAndCancel或者resetWithCompletionHandler,才不会有内存泄露
// [self.session invalidateAndCancel];
[self.session resetWithCompletionHandler:^{
NSLog(@"释放---");
}];
}
(4)优化部分
01 关于文件下载进度的实时更新
02 方法的独立与抽取
以上是关于使用NSURLSessionDataTask实现大文件离线断点下载(完整)的主要内容,如果未能解决你的问题,请参考以下文章
NSURLSessionDataTask 导致高 CPU 使用率
什么时候使用 NSURLSessionDownloadTask 和 NSURLSessionDataTask?
NSURLSessionDataTask 内存警告应用程序崩溃