iOS之NSURLConnection详解(2)

 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

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。