http://bbs.yusian.com/thread-8181-1-1.html
- (void)upload { NSString *urlStr = @"http://localhost/upload.php"; NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:urlStr] cachePolicy:0 timeoutInterval:5.0f]; [self setRequest:request]; NSLog(@"开始上传..."); [NSURLConnection sendAsynchronousRequest:request queue:[[NSOperationQueue alloc] init] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) { NSLog(@"Result--%@", [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]); }]; } - (void)setRequest:(NSMutableURLRequest *)request { NSString *boundary = [NSString stringWithFormat:@"Boundary+%08X%08X", arc4random(), arc4random()]; NSMutableData *body = [NSMutableData data]; // 表单数据 NSMutableDictionary *param = [[NSMutableDictionary alloc] init]; [param setValue:@"254" forKey:@"empId"]; [param setValue:@"18718" forKey:@"shopId"]; /** 遍历字典将字典中的键值对转换成请求格式: --Boundary+72D4CD655314C423 Content-Disposition: form-data; name="empId" 254 --Boundary+72D4CD655314C423 Content-Disposition: form-data; name="shopId" 18718 */ [param enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { NSMutableString *fieldStr = [NSMutableString string]; [fieldStr appendString:[NSString stringWithFormat:@"--%@\r\n", boundary]]; [fieldStr appendString:[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\"\r\n\r\n", key]]; [fieldStr appendString:[NSString stringWithFormat:@"%@", obj]]; [body appendData:[fieldStr dataUsingEncoding:NSUTF8StringEncoding]]; [body appendData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]]; }]; /// 图片数据部分 NSMutableString *topStr = [NSMutableString string]; NSString *path = [[NSBundle mainBundle] pathForResource:@"001.jpg" ofType:nil]; NSData *data = [NSData dataWithContentsOfFile:path]; /**拼装成格式: --Boundary+72D4CD655314C423 Content-Disposition: form-data; name="uploadFile"; filename="001.png" Content-Type:image/png Content-Transfer-Encoding: binary ... contents of boris.png ... */ [topStr appendString:[NSString stringWithFormat:@"--%@\r\n", boundary]]; [topStr appendString:@"Content-Disposition: form-data; name=\"uploadFile\"; filename=\"001.png\"\r\n"]; [topStr appendString:@"Content-Type:image/png\r\n"]; [topStr appendString:@"Content-Transfer-Encoding: binary\r\n\r\n"]; [body appendData:[topStr dataUsingEncoding:NSUTF8StringEncoding]]; [body appendData:data]; [body appendData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]]; // 结束部分 NSString *bottomStr = [NSString stringWithFormat:@"--%@--", boundary]; /**拼装成格式: --Boundary+72D4CD655314C423-- */ [body appendData:[bottomStr dataUsingEncoding:NSUTF8StringEncoding]]; // 设置请求类型为post请求 request.HTTPMethod = @"post"; // 设置request的请求体 request.HTTPBody = body; // 设置头部数据,标明上传数据总大小,用于服务器接收校验 [request setValue:[NSString stringWithFormat:@"%d", body.length] forHTTPHeaderField:@"Content-Length"]; // 设置头部数据,指定了http post请求的编码方式为multipart/form-data(上传文件必须用这个)。 [request setValue:[NSString stringWithFormat:@"multipart/form-data; boundary=%@",boundary] forHTTPHeaderField:@"Content-Type"]; }