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
- NSURLSession实现文件下载和文件上传
- 文件上传和文件下载
- 利用Socket 实现 FTP 文件上传和文件下载
- python ftp 文件上传和文件下载
- Struts2中的文件上传和文件下载
- struts2的文件上传和文件下载
- struts2文件下载和文件上传
- springmvc文件上传和文件下载
- 文件上传和文件压缩下载
- 简单的Ext文件上传,文件下载和文件删除
- 文件上传allowedTypes和文件下载contentType(mimeType)
- 文件上传allowedTypes和文件下载contentType(mimeType)
- 文件上传allowedTypes和文件下载contentType(mimeType)
- linux 通过crt直接上传和下载文件和文件
- iOS NSURLSession 实现网络请求-文件下载-上传-后台下载
- 利用 NSURLSession 实现文件下载
- ios助手开发系列(六):文件操作系列3 - 文件上传和文件下载
- java中ftp下载上传 解决中文文件上传下载中文乱码和文件上传失败下载文件为0kb
- 形态学梯度操作
- 穷举法应用示例:解Google方程式
- 关键字
- iptables DNAT 与 SNAT 详解
- 程序猿趣事
- NSURLSession实现文件下载和文件上传
- 形态学滤波实现角点检测
- OJ.Snake
- mac下快速安装php的各个版本
- 傻了的程序猿
- Activity的Launch mode详解 singleTask正解
- m2e插件
- SimpleBlobDetector 类
- 结构体