苹果原生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 开发步骤 现在,假设 ...
随机推荐
- socket的简单通信
///客户端 package com.ch.day11_myclient; import java.io.BufferedReader;import java.io.IOException;impor ...
- Asp.Net MVC 模型验证详解-实现客户端、服务端双重验证
概要 在asp.net webform开发中经常会对用户提交输入的信息进行校验,一般为了安全起见大家都会在客户端进行Javascript(利于交互).服务端双重校验(安全).书写校验代码是一个繁琐的过 ...
- git-gui
使用Git.Git GUI和TortoiseGit http://zengrong.net/post/1722.htm 但云桌面不能安装,则TortoiseGit不能使用! 只能想到用totalcmd ...
- linux设备驱动归纳总结(十二):简单的数码相框【转】
本文转载自:http://blog.chinaunix.net/uid-25014876-id-116926.html linux设备驱动归纳总结(十二):简单的数码相框 xxxxxxxxxxxxxx ...
- history and its relevant variables in Linux/GNU and Mac OS history命令以及相关环境变量
对于Terminalor们,history命令并不陌生,什么!n, !!更是很常用的,而且您在命令行敲的cmds是默认保存在/home/$USER/.bash_history(linux) /User ...
- zabbix常用的几个key
四:zabbix中常用到的几个key Zabbix的key可以理解为zabbix的命令,执行这个key可以得到相应的结果. 1:监控端口的:net.tcp.port[,3306] /usr/local ...
- linux设备树笔记__dts基本概念及语法【转】
转自:http://www.360doc.com/content/15/1113/11/15700426_512794532.shtml 设备树手册(Device Tree Usage)原文地址:ht ...
- ImageLoader 图片加裁
// String picurl = article.cateLogo;// ImageLoader.getInstance().displayImage(picurl, holder.cate_Lo ...
- ECshop中defined('IN_ECS')的实现原理
在PHP中经常看到如下代码 if (!defined('IN_ECS')) { die('Hacking attempt'); } 实现的原因以及原理如下: ecs ...
- ci中简单实用的权限管理
实用的权限管理 对多数网站来说,使用完整的rbac权限管理杀鸡用牛刀绝对的吃力不讨好,因为我们只是简单分角色然后对角色进行管理行使其相对于的角色赋予的权限; 在实际的开发中用位运算来对权限进行验证是十 ...