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