• NSURLsession利用输出流断点续传


    输出流:NSOutputStream
    作用:用于与下载

    //outputStreamToFileAtPath: append:; 方法会根据路径创建文件,append是否追加任务  
     NSOutputStream *stream = [NSOutputStream outputStreamToFileAtPath:path append:YES];
        //打开输出流
        [self.stream open];
    

    注意点:如果path下有文件,输出流会在该文件下追加任务,如果该路径下没有文件,open方法会创建文件,输出流再次文件下追加任务

    断点下载核心代码
    用于解决重新开始下载,会把文件重新下载一遍,而非下载还未下载的数据,造成的后果就是下载文件的数据越来越大

     //设置请求头信息
        NSString *range = [NSString stringWithFormat:@"bytes=%zd-",currentSize];
        
        [request setValue:range forHTTPHeaderField:@"Range"];
    

    如何得到已经下载的文件大小

     //0.得到已经下载的文件数据的大小
        /*
         第一个参数:文件的路径
         */
        //获取要下载数据到哪个文件的路径
        self.path = [[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:KFileName];
        NSLog(@"%@",self.path);
    
        //获取已下载的数据大小
       NSDictionary *file = [[NSFileManager defaultManager] attributesOfItemAtPath:self.path error:nil];
        NSLog(@"%@",file);
        NSInteger currentData = [file[@"NSFileSize"] integerValue];
        self.currentData = currentData;
    
    

    注意点:如果要显示进度信息,预计下载的大小是此次要下载数据的大小,所以要加上之前已经下载的数据大小,才是文件的总大小

    //在代理方法-didReceiveResponse中
     //获取数据总大小
        self.totalData = response.expectedContentLength + self.currentData;
       
    



  • 相关阅读:
    树莓派镜像拷贝
    zookeeper客户端Watcher管理
    设置ZooKeeper服务器地址列表源码解析及扩展
    利用zookeeper实现发布订阅模式
    maven依赖错误排查经验
    理解CMS GC日志
    深入分析ThreadLocal
    Fail-Fast分析
    Stream学习过程中遇到的一个问题记录
    ClassLoader 学习笔记
  • 原文地址:https://www.cnblogs.com/xzk-it/p/6576577.html
Copyright © 2020-2023  润新知