苹果原生NSURLSession的上传和下载
关于NSURLSession的上传和下载
在iOS7.0后,苹果公司新推出了一个NSURLSession来代替NSURLConnection。NSURLConnection默认是在 主线程执行的。而NSURLSession是在其他线程上执行的。本篇主要实现了下载和上传,比起NSURLConnection更加简单。线程控制掌握 更加清晰。
#pragma mark -下载
- (IBAction)DownLoad{//1.URL NSString *urlStr = @"http://she.21cn.com/emotions/mingren/a/2014/0309/15/26645767.shtml";NSURL *url = [NSURL URLWithString:urlStr];//2.NSURLRequest NSURLRequest *request = [NSURLRequestrequestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicytimeoutInterval:5.0];//3.NSURLSession NSURLSession *session = [NSURLSessionsharedSession];NSURLSessionDownloadTask *downLoad = [session downloadTaskWithRequest:request completionHandler:^(NSURL *location, NSURLResponse *response, NSError *error) {if (error) {NSLog(@"error = %@",error.localizedDescription);}else{// location是下载的临时文件目录 NSLog(@"%@", location);// 如果要保存文件,需要将文件保存至沙盒// 1. 根据URL获取到下载的文件名 NSString *fileName = [urlStr lastPathComponent];// 2. 生成沙盒的路径 NSArray *docs = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);NSString *path = [docs[0] stringByAppendingPathComponent:fileName];NSURL *toURL = [NSURL fileURLWithPath:path];// 3. 将文件从临时文件夹复制到沙盒,在iOS中所有的文件操作都是使用NSFileManager [[NSFileManager defaultManager] copyItemAtURL:location toURL:toURL error:nil];// 4. 将图像设置到UIImageView dispatch_async(dispatch_get_main_queue(), ^{UIImage *image = [[UIImage alloc] initWithContentsOfFile:path];_imageView.image = image;});}}];//4.因为任务默认是挂起状态,需要恢复任务(执行任务) [downLoad resume];}
下载
#pragma mark -上传
- (IBAction)upLoad{// 0. 判断imageView是否有内容if (_imageView.image == nil) {NSLog(@"image view is empty");return;}// 0. 上传之前在界面上添加指示符 UIActivityIndicatorView *indicator = [[UIActivityIndicatorViewalloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];// 设置位置??? CGSize size = _imageView.bounds.size;indicator.center = CGPointMake(size.width / 2.0, size.height / 2.0);[self.imageView addSubview:indicator];[indicator startAnimating];// 1. URL NSString *urlStr = @"http://192.168.3.251/uploads/123.jpg";NSURL *url = [NSURL URLWithString:urlStr];// 2. Request -> PUT,request的默认操作是GET NSMutableURLRequest *request = [NSMutableURLRequestrequestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicytimeoutInterval:5.0f];request.HTTPMethod = @"PUT";// *** 设置网络请求的身份验证! ***// 1> 授权字符串 NSString *authStr = @"admin:123456";// 2> BASE64的编码,避免数据在网络上以明文传输// iOS中,仅对NSData类型的数据提供了BASE64的编码支持 NSData *authData = [authStr dataUsingEncoding:NSUTF8StringEncoding];NSString *encodeStr = [authData base64EncodedStringWithOptions:NSDataBase64EncodingEndLineWithCarriageReturn];NSString *authValue = [NSString stringWithFormat:@"Basic %@", encodeStr];[request setValue:authValue forHTTPHeaderField:@"Authorization"];// 3. Session NSURLSession *session = [NSURLSessionsharedSession];// 4. UploadTask NSData *imageData = UIImageJPEGRepresentation(_imageView.image, 0.75);NSURLSessionUploadTask *upload = [session uploadTaskWithRequest:request fromData:imageData completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {// 上传完成后,data参数转换成string就是服务器返回的内容 NSString *str = [[NSStringalloc] initWithData:data encoding:NSUTF8StringEncoding];NSLog(@"OK -> %@", str);if (error != nil) {NSLog(@"ERROR -> %@", error.localizedDescription);} else {}[NSThreadsleepForTimeInterval:5.0f];dispatch_async(dispatch_get_main_queue(), ^{[indicator stopAnimating];[indicator removeFromSuperview];});}];[upload resume];}
上传
转载于:https://www.cnblogs.com/zhangyang17/p/3597623.html
苹果原生NSURLSession的上传和下载相关推荐
- 原生Servlet文件上传和下载Servlet多个文件上传
2019独角兽企业重金招聘Python工程师标准>>> 转载:原文连接https://blog.csdn.net/HaHa_Sir/article/details/81744629 ...
- 通读AFN②--AFN的上传和下载功能分析、SessionTask及相应的session代理方法的使用细节...
这一部分主要研究AFN的上传和下载功能,中间涉及到各种NSURLSessionTask的一些创建的解析和HTTPSessionManager对RESTful风格的web应用的支持,同时会穿插一点NSU ...
- 2022苹果AppStore应用商店上传与APP上传流程必看(基础篇)
如果App想要成功出现在商店中,开发者还需要经过上传操作和苹果公司的严格审核.同时,在App上架App Store时,如有违规,将受到苹果公司的处罚.此外,优质app也会得到苹果的推荐,通过优质曝光和 ...
- Akka实战:HTTP大文件断点上传、下载,秒传
2019独角兽企业重金招聘Python工程师标准>>> 访问:https://github.com/yangbajing/scala-applications/tree/master ...
- 科普|不同协议下远程服务器文件上传_下载优劣对比
作为一个程序员,如果不知道如何进行远程服务器的文件上传与下载,实在是一件尴尬的事情.打开百度,搜索「远程服务器 上传下载」,你能得到 63,100,000 个搜搜结果,五花八门的操作方式的让人眼花缭乱 ...
- java http 下载文件_JAVA通过HttpURLConnection 上传和下载文件的方法
本文介绍了JAVA通过HttpURLConnection 上传和下载文件的方法,分享给大家,具体如下: HttpURLConnection文件上传 HttpURLConnection采用模拟浏览器上传 ...
- 文件上传和下载(断点下载)
分片思想 前端:使用 WebUploader 插件,文件分片(拆分)和进度条都是前端完成. 上传时,前端将文件查分成若干个小文件上传给后端,后端一次只处理一个小文件,前端多次调用后端接口,实现大文件上 ...
- SSM之SpringMVC 04 —— Ajax、拦截器、文件上传和下载
系列文章 SSM之SpringMVC 01 -- SpringMVC原理及概念.Hello SpringMVC 注解版和配置版 SSM之SpringMVC 02 -- Controller和RestF ...
- ajax上传和下载文件
ajax上传和下载文件 jQuery本身支持上传文件,但是不支持下载文件,这里要用到的组件是axios. <form class="form-horizontal" meth ...
最新文章
- 你的机器人女友到了,请签收
- 十三: 悲观锁乐观锁:解决丢失更新问题
- mysql表全连接_关于mysql 实现表连接(左,右,内,全连接)
- 有哪些好的刷题网站?2018年最受欢迎的编程挑战网站
- leetcode 53 python 动态规划
- Python基础学习思维导图
- Spring官网改版后下载
- 计算机达人成长之路(8)连载
- ajax css文件,wordpress 添加JS,css文件,实现AJAX效果
- ps切图后 JAVA开发_2018年设计师都在用的PS切图插件--摹客
- mysql InnoDB引擎支持hash索引吗
- 射电天文偏振线的绘制
- HDU4825/5536 [01 字典树/简单字典树更新]
- java float 运算_java基础之float、double底层运算
- 计算机成人本科学历,计算机专业成人本科
- 企业文化是数字化转型最大障碍-解读《2022年首席数据官调查报告》
- 微信活动报名源码php,fb1357 Thinkphp活动报名发布微信小程序源码 聚会活动报名小程序含说明...
- 中标麒麟桌面版7.0(NeoKylin linux desktop release 7.0)配置pyqt5运行环境说明
- php+rabbitMQ操作之延迟队列(延迟插件)
- 计蒜客蓝桥杯模拟赛---青出于蓝而胜于蓝
热门文章
- [Ext JS]5.8 Group Grid-分组网格
- 第12章[12.10.1] Ext JS + CKEditor+Spring Boot 实现编辑器图片上传
- lpsolve java_如何使用LpSolve在R中设置线性编程优化?
- SFML 与 VS2015 的安装配置
- cdr三角形转化为圆角_CDR金属质感小图标图文解析
- Linux中Docker部署Redis
- controller 中@autowired 报错_Spring中常用注解
- javascript 无法修改 数组中对象_谈谈JavaScript中对象建立(Object)
- jnativecpp.dll一定要放到系统目录下吗_「实用」室内甲醛到底该如何去除?关键要做到这两点...
- java ssm框架做增删改查,使用SSM框架组合实现增删改查的功能