关于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的上传和下载相关推荐

  1. 原生Servlet文件上传和下载Servlet多个文件上传

    2019独角兽企业重金招聘Python工程师标准>>> 转载:原文连接https://blog.csdn.net/HaHa_Sir/article/details/81744629 ...

  2. 通读AFN②--AFN的上传和下载功能分析、SessionTask及相应的session代理方法的使用细节...

    这一部分主要研究AFN的上传和下载功能,中间涉及到各种NSURLSessionTask的一些创建的解析和HTTPSessionManager对RESTful风格的web应用的支持,同时会穿插一点NSU ...

  3. 2022苹果AppStore应用商店上传与APP上传流程必看(基础篇)​

    如果App想要成功出现在商店中,开发者还需要经过上传操作和苹果公司的严格审核.同时,在App上架App Store时,如有违规,将受到苹果公司的处罚.此外,优质app也会得到苹果的推荐,通过优质曝光和 ...

  4. Akka实战:HTTP大文件断点上传、下载,秒传

    2019独角兽企业重金招聘Python工程师标准>>> 访问:https://github.com/yangbajing/scala-applications/tree/master ...

  5. 科普|不同协议下远程服务器文件上传_下载优劣对比

    作为一个程序员,如果不知道如何进行远程服务器的文件上传与下载,实在是一件尴尬的事情.打开百度,搜索「远程服务器 上传下载」,你能得到 63,100,000 个搜搜结果,五花八门的操作方式的让人眼花缭乱 ...

  6. java http 下载文件_JAVA通过HttpURLConnection 上传和下载文件的方法

    本文介绍了JAVA通过HttpURLConnection 上传和下载文件的方法,分享给大家,具体如下: HttpURLConnection文件上传 HttpURLConnection采用模拟浏览器上传 ...

  7. 文件上传和下载(断点下载)

    分片思想 前端:使用 WebUploader 插件,文件分片(拆分)和进度条都是前端完成. 上传时,前端将文件查分成若干个小文件上传给后端,后端一次只处理一个小文件,前端多次调用后端接口,实现大文件上 ...

  8. SSM之SpringMVC 04 —— Ajax、拦截器、文件上传和下载

    系列文章 SSM之SpringMVC 01 -- SpringMVC原理及概念.Hello SpringMVC 注解版和配置版 SSM之SpringMVC 02 -- Controller和RestF ...

  9. ajax上传和下载文件

    ajax上传和下载文件 jQuery本身支持上传文件,但是不支持下载文件,这里要用到的组件是axios. <form class="form-horizontal" meth ...

最新文章

  1. 你的机器人女友到了,请签收
  2. 十三: 悲观锁乐观锁:解决丢失更新问题
  3. mysql表全连接_关于mysql 实现表连接(左,右,内,全连接)
  4. 有哪些好的刷题网站?2018年最受欢迎的编程挑战网站
  5. leetcode 53 python 动态规划
  6. Python基础学习思维导图
  7. Spring官网改版后下载
  8. 计算机达人成长之路(8)连载
  9. ajax css文件,wordpress 添加JS,css文件,实现AJAX效果
  10. ps切图后 JAVA开发_2018年设计师都在用的PS切图插件--摹客
  11. mysql InnoDB引擎支持hash索引吗
  12. 射电天文偏振线的绘制
  13. HDU4825/5536 [01 字典树/简单字典树更新]
  14. java float 运算_java基础之float、double底层运算
  15. 计算机成人本科学历,计算机专业成人本科
  16. 企业文化是数字化转型最大障碍-解读《2022年首席数据官调查报告》
  17. 微信活动报名源码php,fb1357 Thinkphp活动报名发布微信小程序源码 聚会活动报名小程序含说明...
  18. 中标麒麟桌面版7.0(NeoKylin linux desktop release 7.0)配置pyqt5运行环境说明
  19. php+rabbitMQ操作之延迟队列(延迟插件)
  20. 计蒜客蓝桥杯模拟赛---青出于蓝而胜于蓝

热门文章

  1. [Ext JS]5.8 Group Grid-分组网格
  2. 第12章[12.10.1] Ext JS + CKEditor+Spring Boot 实现编辑器图片上传
  3. lpsolve java_如何使用LpSolve在R中设置线性编程优化?
  4. SFML 与 VS2015 的安装配置
  5. cdr三角形转化为圆角_CDR金属质感小图标图文解析
  6. Linux中Docker部署Redis
  7. controller 中@autowired 报错_Spring中常用注解
  8. javascript 无法修改 数组中对象_谈谈JavaScript中对象建立(Object)
  9. jnativecpp.dll一定要放到系统目录下吗_「实用」室内甲醛到底该如何去除?关键要做到这两点...
  10. java ssm框架做增删改查,使用SSM框架组合实现增删改查的功能