码迷,mamicode.com
首页 > Web开发 > 详细

使用NSURLSessionDataTask实现大文件离线断点下载(完整)

时间:2017-07-16 10:02:18      阅读:148      评论:0      收藏:0      [点我收藏+]

标签:ide   head   code   cancel   comment   handler   file   应该   实时   

(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实现大文件离线断点下载(完整)

标签:ide   head   code   cancel   comment   handler   file   应该   实时   

原文地址:http://www.cnblogs.com/xufengyuan/p/7189437.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!