1 一、NSURLConnection
 2 1.发送请求
 3 1> 发送一个同步请求
 4 + (NSData *)sendSynchronousRequest:(NSURLRequest *)request returningResponse:(NSURLResponse **)response error:(NSError **)error;
 5
 6 2> 发送一个异步请求(block)
 7 + (void)sendAsynchronousRequest:(NSURLRequest*) request
 8 queue:(NSOperationQueue*) queue
 9 completionHandler:(void (^)(NSURLResponse* response, NSData* data, NSError* connectionError)) handler;
10
11 3> 发送一个异步请求(代理方法)
12 [NSURLConnection connectionWithRequest:request delegate:self];
13 [[NSURLConnection alloc] initWithRequest:request delegate:self];
14 [[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:YES];
15
16 NSURLConnection *conn = [[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:NO];
17 [conn start];
18
19 2.文件下载(大文件下载)
20 1> 实现方案 : 边下载边写入(写到沙盒的某个文件中)
21 2> 具体实现步骤
22 a. 在接收到服务器的响应时
23 // 创建一个空文件 - NSFileManager
24 [mgr createFileAtPath:self.destPath contents:nil attributes:nil];
25
26 // 创建一个跟空文件相关联的句柄对象 - NSFileHandle
27 [NSFileHandle fileHandleForWritingAtPath:self.destPath];
28
29 b. 在接收到服务器的数据时
30 // 利用句柄对象将服务器返回的数据写到文件的末尾
31 // 移动到文件的尾部
32 [self.writeHandle seekToEndOfFile];
33 // 从当前移动的位置(文件尾部)开始写入数据
34 [self.writeHandle writeData:data];
35
36 c. 在接收完服务器返回的数据时
37 // 关闭句柄
38 [self.writeHandle closeFile];
39 self.writeHandle = nil;
40
41 3.断点下载
42 1> 关键技术点
43 * 设置请求头Range, 告诉服务器下载哪一段数据
44
45 4.文件上传
46 1> 明确
47 * 只能用POST请求
48 * 请求参数都在请求体(文件参数\非文件类型的普通参数)
49
50 2> 实现步骤
51 a. 拼接请求体(文件参数\非文件类型的普通参数)
52 * 文件参数
53 // 参数的开始标记(分割线)
54 --nihao\r\n
55 // 参数描述(参数名...)
56 Content-Disposition: form-data; name="参数名"; filename="文件名"\r\n
57 // 文件类型
58 Content-Type: 文件的类型MIMEType\r\n
59 // 文件的二进制数据(参数值)
60 \r\n
61 文件的二进制数据
62 \r\n
63
64 * 非文件参数(普通参数)
65 // 参数的开始标记(分割线)
66 --nihao\r\n
67 // 参数描述(参数名...)
68 Content-Disposition: form-data; name="参数名"\r\n
69 // 参数值
70 \r\n
71 参数值
72 \r\n
73
74 * 所有参数结束的标记
75 --nihao--\r\n
76
77 b. 设置请求头
78 * 请求体的长度
79 Content-Length : 请求体的长度(字节长度)
80
81 * 请求数据的类型
82 Content-Type :
83 // 普通POST请求: application/x-www-form-urlencoded
84 // 上传文件的POST请求 : multipart/form-data; boundary=--nihao

转载于:https://www.cnblogs.com/changxs/p/4048434.html

iOS之NSURLConnection详解(2)相关推荐

  1. IOS 多线程04-GCD详解 底层并发 API

    IOS 多线程04-GCD详解 底层并发 API 注:本人是翻译过来,并且加上本人的一点见解. 前言 想要揭示出表面之下深层次的一些可利用的方面.这些底层的 API 提供了大量的灵活性,随之而来的是大 ...

  2. iOS 2D绘图详解(Quartz 2D)之路径(点,直线,虚线,曲线,圆弧,椭圆,矩形)

    前言:一个路径可以包含由一个或者多个shape以及子路径subpath,quartz提供了很多方便的shape可以直接调用.例如:point,line,Arc(圆弧),Curves(曲线),Ellip ...

  3. iOS核心动画详解swift版----基础动画

    2019独角兽企业重金招聘Python工程师标准>>> iOS核心动画详解swift版---基础动画 创建工程,添加2个ViewController,通过rootViewContro ...

  4. iOS教程:详解iOS多图下载的缓存机制

    ios教程,ios的干货一直来不及给大家分享,小编也是一直在忙啊!今天给大家献上ios:详解iOS多图下载的缓存机制 1. 需求点是什么? 这里所说的多图下载,就是要在tableview的每一个cel ...

  5. iOS TableView 使用详解

     IOS TableView 详解 一.建立 UITableView DataTable = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, ...

  6. iOS 内购详解-代码篇

    内购项目-代码篇 一.分步骤说明 1.获取商品列表 2.苹果服务器返回的可购买商品 3.下单购买商品 4.购买队列状态变化,判断购买状态是否成功 5.交易验证 6.拿到的收据信息是,此App所有购买的 ...

  7. ios NSFileManager 用法详解

    2019独角兽企业重金招聘Python工程师标准>>> iPhone文件系统NSFileManager讲解是本文要介绍的内容,主要是通过iphone文件系统来学习NSFileMana ...

  8. iOS runtime 底层详解、内部原理、场景应用

    前言学:位域和共用体 一:isa指针--runtime之前的学习 1.1:苹果应用的按位或.按位与 二:类对象信息 2.1:类对象信息:rw_t 2.2:类对象信息:方法缓存(很关键) 2.2:类对象 ...

  9. iOS in-app purchase详解

    in-app purchase教程: http://www.appcoda.com/in-app-purchase-tutorial/ 3.后台服务器验证收据的正确性 IOS 内支付有两种模式: 1) ...

最新文章

  1. 使用.NET REACTOR制作软件许可证
  2. oracle 存储过程的基本语法
  3. http路径转file会变成反斜杠_PHP session反序列化漏洞
  4. 模块化数据中心还需精工细作
  5. 笨方法学python--变量和命名
  6. javascript 原生得到document.Element的方法
  7. Ubuntu apt upgrade后黑屏问题
  8. HTML+CSS+JS实现 ❤️three 3D铅笔绘图工具特效❤️
  9. linux中tar命令怎么用,linux tar命令使用详解
  10. latex入门(一)——latex网站overleaf
  11. Javaweb生成族谱树形图
  12. 360浏览器打开html不能正常显示图片,“网页图片显示异常,网页图片、验证码显示不正常,经常显示不全或根本不显示”的解决方案...
  13. 简单枚举 / 枚举排列
  14. 微信爬取过程中参数分析
  15. 计算机怎么换桌面皮肤,如何更换电脑腾讯视频上的皮肤样式
  16. 软件设计领域没有银弹,但代码大师MaxKanat-Alexander的建议绝对能给你带来启发...
  17. android 退出 动画效果,Activity进入和退出动画的实现
  18. Vue 中实现Video视频不可快进
  19. 《培根随笔》读书笔记(二)
  20. Lightroom无法在卷计算机上,lightroom无法正常启动怎么办?解决lightroom无法启动方法...

热门文章

  1. 客户端序列码生成_Django REST Framework教程(2): 序列化器介绍及开发基于函数视图的API...
  2. 一年级学python_你是如何自学 Python 的?
  3. win7系统mysql连接不上数据库吗_Win7系统使用数据库时mysql频繁掉线无法连接的两种解决方法...
  4. java socket长连接怎么维持_socket长连接的维持
  5. SSM整合——实现图书的查询功能
  6. Git基础操作及常见命令——详解
  7. 最新小白详细描述在centos7.5上安装python3并使用Nginx+virtualenv+supervisor来部署tornado项目(整理集合结合实际)系列2
  8. MongoDB两阶段提交实现事务
  9. sstream和strstream以及fstream
  10. 你真的会玩SQL吗?玩爆你的数据报表之存储过程编写(下)