• 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
    
    55 // 参数描述(参数名...)
    56 Content-Disposition: form-data; name="参数名"; filename="文件名"
    
    57 // 文件类型
    58 Content-Type: 文件的类型MIMEType
    
    59 // 文件的二进制数据(参数值)
    60 
    
    61 文件的二进制数据
    62 
    
    63 
    64 * 非文件参数(普通参数)
    65 // 参数的开始标记(分割线)
    66 --nihao
    
    67 // 参数描述(参数名...)
    68 Content-Disposition: form-data; name="参数名"
    
    69 // 参数值
    70 
    
    71 参数值
    72 
    
    73 
    74 * 所有参数结束的标记
    75 --nihao--
    
    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
  • 相关阅读:
    [POJ 3253] Fence Repair
    [POJ 1422] Air Raid
    [POJ 2195] Going Home
    [POJ 1273] Drainage Ditches
    [BZOJ 1718] Redundant Paths
    [POJ 1041] John's Trip
    [NOI 2003] 逃学的小孩
    __attribute__((noreturn))的用法
    回味经典——uboot1.1.6 之 第二阶段 第三阶段
    回味经典——uboot1.1.6 之 第一阶段
  • 原文地址:https://www.cnblogs.com/changxs/p/4048434.html
Copyright © 2020-2023  润新知