苹果原生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[] 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]; }
上传
苹果原生NSURLSession的上传和下载的更多相关文章
- 通读AFN②--AFN的上传和下载功能分析、SessionTask及相应的session代理方法的使用细节
这一部分主要研究AFN的上传和下载功能,中间涉及到各种NSURLSessionTask的一些创建的解析和HTTPSessionManager对RESTful风格的web应用的支持,同时会穿插一点NSU ...
- iOS开发中文件的上传和下载功能的基本实现-备用
感谢大神分享 这篇文章主要介绍了iOS开发中文件的上传和下载功能的基本实现,并且下载方面讲到了大文件的多线程断点下载,需要的朋友可以参考下 文件的上传 说明:文件上传使用的时POST请求,通常把要上传 ...
- SpringMVC 实现文件上传与下载,并配置异常页面
目录 上传文件的表单要求 Spring MVC实现上传文件 需要导入的jar包 配置MultipartResolver解析器 编写接收上传文件的控制器 Spring MVC实现文件下载 下载文件时的h ...
- Day10 上传和下载
上传 将本地文件传输到服务器 jsp: 文件上传的请求方式必须是post input的type必须是file enctype="multipart/form-data" ...
- javaweb基础整理随笔-----上传与下载步骤详解
这次整理的是上传与下载的原生代码解析: 上传:1.对页面的要求:enctype="multipart/form-data" method="post" ...
- Spring MVC 上传、下载、显示图片
目录 1. 准备工作 1.1 数据库表准备 1.2 实体类 User 和 Mapper(DAO) 1.3 pom.xml 依赖包 1.4 SSM 框架的整合配置 2. 控制器 UserControll ...
- javaWeb文件上传与下载
文件上传与下载在项目中运用的使用频率很大 今天也花时间整理了一下 多文件上传图片回显 和文件下载 1.多文件上传 这里会涉及到几个属性 fileSizeThreshold:缓冲区文件的大小 如果上传 ...
- java实现大文件上传和下载
[文件上传和下载]是很多系统必备功能, 比如PM\OA\ERP等:系统中常见的开发模式有B/S和C/S,而前者主要是通过浏览器来访问web服务器,一般采用七层协议中的[应用层http]进行数据传输,后 ...
- Struts1.3——文件上传和下载
1.Struts文件上传 在Web开发中,会经常涉及到文件的上传和下载,比如在注册账户的时候,我们需要上传自己的头像等. 我们可以利用Struts很方便地实现文件的上传. 1.1 开发步骤 现在,假设 ...
随机推荐
- 一小时学会Markdown写作
写作也是创作一件产品.以易懂.简洁.凝练的方式表达观点.阐述见解和知识,发挥影响力. 为什么要使用 Markdown 博文迁移的排版兼容.当在多个博客之间,或者在线博客与本地笔记软件之间迁移的时候,排 ...
- 所谓完整的linux系统包括哪些部分呢?【转】
本文转载自:http://www.eeskill.com/article/index/id/1358.html 简介:三部分:bootloader.linux kernel(linux内核).root ...
- Java简单数据类型转换
1. Integer<---String (1) Integer x = new Integer(Integer.parseInt(String)); 2. Integer<--- ...
- Java相关内容解析
java中的反射机制是什么,有什么作用啊?要点:JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法:这种动态获取的以及动态调 ...
- Mac下使用Automator实现隐藏和显示
本文使用Makdown编辑 通常系统中打开一个文件有好多种方法,编辑也是.例如你要打开OmniGraffle来画个图(suppose you are working on the Mac OS X) ...
- js获取IP地址方法总结_转
js代码获取IP地址的方法,如何在js中取得客户端的IP地址.原文地址:js获取IP地址的三种方法 http://www.jbxue.com/article/11338.html 1,js取得IP地址 ...
- Length of Last Word
class Solution { public: int lengthOfLastWord(string s) { ; ; while(s[i]&&s[i]==' ') i++; // ...
- Swoole 遇上 PHP会是怎样的结果呢
一直想写点Swoole的东西,毕竟它重新定义了php,却一直不知道怎么下手写 Swoole涉及的知识点非常多,互为表里,每次想写都发现根本理不出一个头绪 Swoole是一个php的扩展,它的核心目的就 ...
- JavaScript的一些基本语句代码如下!!!!
<html><body> <script type="text/javascript">document.write("<h1& ...
- PHP笔记随笔
1.CSS控制页面文字不能复制: body{-webkit-user-select:none;} 2.[php过滤汉字和非汉字] $sc="aaad....##--__i汉字过滤&quo ...