难倒:NSURLConnection + php – 键/值格式问题

我很难过 试图发布到NSURLConnection的PHP脚本。 在这一整个下午,所以我想现在是时候寻求帮助。 我已经阅读了很多这里@ NSURLConnection的post,但我还没有想出我的错误。

我正在上传一个图像,有两个键/值对: useruser 。 我正在使用的ObjC代码如下。 日志输出显示string(跳过图像数据)。 我使用底部的PHP脚本在浏览器中testing我的服务器端PHP:它工作正常。 所以我在某种程度上搞砸了ObjC代码。

任何人都看到我要去哪里错了?

//日志输出

—————————– 14737809831466499882746641449

内容处理:表单数据;

userfile的= someImage&用户=困倦;

内容types:应用程序/八位字节stream

// objC

 NSData *imageData = UIImageJPEGRepresentation(img, .5); NSString *urlString = @"http://example.com/loader.php"; NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init]; [request setURL:[NSURL URLWithString:urlString]]; [request setHTTPMethod:@"POST"]; NSString *boundary = [NSString stringWithString:@"---------------------------14737809831466499882746641449"]; NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@",boundary]; [request addValue:contentType forHTTPHeaderField: @"Content-Type"]; NSMutableData *body = [NSMutableData data]; [body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]]; [body appendData:[[NSString stringWithString:@"Content-Disposition: form-data; \r\n"] dataUsingEncoding:NSUTF8StringEncoding]]; NSString * user = @"sleepy"; [body appendData:[[NSString stringWithString:@"userfile=someImage"] dataUsingEncoding:NSUTF8StringEncoding]]; [body appendData:[[NSString stringWithFormat:@"&user=%@;\r\n", user] dataUsingEncoding:NSUTF8StringEncoding]]; [body appendData:[[NSString stringWithString:@"Content-Type: application/octet-stream\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]]; NSString * testOutput = [[NSString alloc] initWithData:body encoding:NSUTF8StringEncoding]; NSLog(testOutput); // log it [body appendData:[NSData dataWithData:imageData]]; [body appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]]; // setting the body of the post to the reqeust [request setHTTPBody:body]; // now lets make the connection to the web [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) { NSLog(@"Response: %@",[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]); [self.navigationController popToRootViewControllerAnimated:YES]; }]; 

//浏览器

 <?php $directory_self = str_replace(basename($_SERVER['PHP_SELF']), '', $_SERVER['PHP_SELF']); $uploadHandler = 'http://' . $_SERVER['HTTP_HOST'] . $directory_self . 'cuploader.php'; ?><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html lang="en"> <head> <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"> <link rel="stylesheet" type="text/css" href="stylesheet.css"> <title>Upload form</title> </head> <body> <form id="Upload" action="<?php echo $uploadHandler ?>" enctype="multipart/form-data" method="post"> <h1> Test </h1> <p> <label for="userfile">File to upload:</label> <input id="userfile" type="text" name="userfile"> </p> <p> <label for="user">User</label> <input id="user" type="text" name="user"> </p> <p> <label for="submit">Press to...</label> <input id="submit" type="submit" name="submit" value="Upload me!"> </p> </form> </body> </html> 

这是我用来发送POST数据的function。

  -(void)sendData:(NSString*)data toServer:(NSString*)url{ [UIApplication sharedApplication].networkActivityIndicatorVisible = YES; NSData *postData = [data dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES]; NSString *postLength = [NSString stringWithFormat:@"%d",[postData length]]; NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease]; [request setURL:[NSURL URLWithString:url]]; [request setHTTPMethod:@"POST"]; [request setValue:postLength forHTTPHeaderField:@"Content-Length"]; [request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Current-Type"]; [request setHTTPBody:postData]; NSURLConnection *conn = [[NSURLConnection alloc]initWithRequest:request delegate:self]; if(conn){ //Connection successful } else{ //Connection Failed } [conn release]; 

}

“数据”string的forms是@“&user = username&pass = password”等

上传图片,我添加这个:

  NSData *jpeg = [[NSData alloc] initWithData:UIImagePNGRepresentation(image)]; //UIImageJPEGRepresentation NSString *param = @""; NSString *footer = [NSString stringWithFormat:@"\n--%@--\n", @"0194784892923"]; param = [param stringByAppendingString:[NSString stringWithFormat:@"--%@\n", @"0194784892923"]]; param = [param stringByAppendingString:@"Content-Disposition: form-data; name=\"userfile\";filename=\"image.png\"\nContent-Type: image/png\n\n"]; //NSLog(@"jpeg size: %d", [jpeg length]); NSMutableData *data = [NSMutableData data]; [data appendData:[param dataUsingEncoding:NSASCIIStringEncoding]]; [data appendData:jpeg]; [data appendData:[[UserInfo retrieveSingleton].userName dataUsingEncoding:NSASCIIStringEncoding]]; [data appendData:[footer dataUsingEncoding:NSASCIIStringEncoding]]; 

希望这可以帮助。