zoukankan      html  css  js  c++  java
  • 使用NSURLSessionDataTask实现大文件离线断点下载(完整)

    6.1 涉及知识点

    (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 方法的独立与抽取
  • 相关阅读:
    Thinkphp中自己组合的数据怎样使用框架的分页
    CI框架不能有Index控制器
    购物车,修改数量错误
    TypeError: 'stepUp' called on an object that does not implement interface HTMLInputElement.
    OAuth2.0
    通过控制面板查看时间日志
    js再学习笔记
    Thinkphp验证码异步验证第二次及以后验证,验证错误----待解决
    cookie&&session再理解笔记
    markdown语法学习笔记
  • 原文地址:https://www.cnblogs.com/HMJ-29/p/4943912.html
Copyright © 2011-2022 走看看