NSURLSession实现文件下载和文件上传

来源:互联网 发布:手机淘宝怎样看追评 编辑:程序博客网 时间:2024/05/17 21:42
6 使用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 方法的独立与抽取

7 NSURLSession实现文件上传

(1)实现文件上传的方法

      /*     第一个参数:请求对象     第二个参数:请求体(要上传的文件数据)     block回调:     NSData:响应体     NSURLResponse:响应头     NSError:请求的错误信息     */    NSURLSessionUploadTask *uploadTask =  [session uploadTaskWithRequest:request fromData:data completionHandler:^(NSData * __nullable data, NSURLResponse * __nullable response, NSError * __nullable error)

(2)设置代理,在代理方法中监听文件上传进度

/* 调用该方法上传文件数据 如果文件数据很大,那么该方法会被调用多次 参数说明:     totalBytesSent:已经上传的文件数据的大小     totalBytesExpectedToSend:文件的总大小 */-(void)URLSession:(nonnull NSURLSession *)session task:(nonnull NSURLSessionTask *)task didSendBodyData:(int64_t)bytesSent totalBytesSent:(int64_t)totalBytesSent totalBytesExpectedToSend:(int64_t)totalBytesExpectedToSend{    NSLog(@"%.2f",1.0 * totalBytesSent/totalBytesExpectedToSend);}

(3)关于NSURLSessionConfiguration相关

01 作用:可以统一配置NSURLSession,如请求超时等02 创建的方式和使用
//创建配置的三种方式+ (NSURLSessionConfiguration *)defaultSessionConfiguration;+ (NSURLSessionConfiguration *)ephemeralSessionConfiguration;+ (NSURLSessionConfiguration *)backgroundSessionConfigurationWithIdentifier:(NSString *)identifier NS_AVAILABLE(10_10, 8_0);//统一配置NSURLSession-(NSURLSession *)session{    if (_session == nil) {        //创建NSURLSessionConfiguration        NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration];        //设置请求超时为10秒钟        config.timeoutIntervalForRequest = 10;        //在蜂窝网络情况下是否继续请求(上传或下载)        config.allowsCellularAccess = NO;        _session = [NSURLSession sessionWithConfiguration:config delegate:self delegateQueue:[NSOperationQueue mainQueue]];    }    return _session;}
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 健身教练岁数大了以后怎么办 超变战陀玩具手柄坏了怎么办 飓风战魂三陀螺中轴坏了怎么办 怎么办晚安角和铁陀螺 白衣服染上荧光剂了怎么办 指尖陀螺不亮了怎么办 手指陀螺不转了怎么办 月经推迟私处还老是流水怎么办 苹果手机刷机后忘记id密码怎么办 锤基意外怀孕怎么办零6 职场遇到心机婊怎么办 高二会考没过怎么办 保险柜没电了打不开怎么办 保险柜没有电了打不开怎么办 小保险箱没电了怎么办 bim墙的颜色反了怎么办 眼睛大但是无神怎么办 吃了凉的胃难受怎么办 吃凉东西胃疼怎么办 游戏只有一个分辨率选项怎么办 玩游戏心态易崩怎么办 打游戏心态炸了怎么办 赛鸽比赛回来拉稀怎么办 鸽子拉竹节水便怎么办 新买的鸽子拉稀怎么办 信鸽羽毛上长了虫子怎么办 羊肉煮熟了太硬怎么办 切菜不小心切到手指怎么办 打荷盘子端错了怎么办 学厨师不会翻锅怎么办? 在饭店上班不给工资怎么办 炒菜的左手拿不起锅怎么办?? 厨师想尽快上手炒菜怎么办? 空调吹的肩膀痛怎么办 学厨师翻锅不会怎么办 肋软骨隆鼻太硬怎么办 百度云下载速度慢怎么办 买的种子没出怎么办 铃木小r烧整流器怎么办 厨师在厨房太热怎么办 被家长投诉体罚孩子怎么办