Check out this tutorial, which is pretty nice:
http://iphone.zcentric.com/2008/08/29/post-a-uiimage-to-the-web/
One thing that is not entirely correct is that it passes 90 as a quality setting in the UIImageJPEGRepresentation, which actually takes quality as a float between 0.0 and 1.0, so it should be 0.9 instead. I'm sure the code works, it just sets 100% quality instead of 90% as intended. And, just for convenience and in case the connection is broken, here is the corresponding code (reorganized for clarity and better fit to the question):
- (void)uploadImage:(UIImage *)image toURL:(NSURL *)url withTitle:(NSString *)title { // encode the image as JPEG NSData *imageData = UIImageJPEGRepresentation(image, 0.9); // set up the request NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease]; [request setURL:url]; // create a boundary to delineate the file NSString *boundary = @"14737809831466499882746641449"; // tell the server what to expect NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@", boundary]; [request addValue:contentType forHTTPHeaderField: @"Content-Type"]; // make a buffer for the post body NSMutableData *body = [NSMutableData data]; // add a boundary to show where the title starts [body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n", boundary] dataUsingEncoding:NSASCIIStringEncoding]]; // add the title [body appendData:[ @"Content-Disposition: form-data; name=\"title\"\r\n\r\n" dataUsingEncoding:NSASCIIStringEncoding]]; [body appendData:[title dataUsingEncoding:NSASCIIStringEncoding]]; // add a boundary to show where the file starts [body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n", boundary] dataUsingEncoding:NSASCIIStringEncoding]]; // add a form field [body appendData:[ @"Content-Disposition: form-data; name=\"picture\"; filename=\"image.jpeg\"\r\n" dataUsingEncoding:NSASCIIStringEncoding]]; // tell the server to expect some binary [body appendData:[ @"Content-Type: application/octet-stream\r\n" dataUsingEncoding:NSASCIIStringEncoding]]; [body appendData:[ @"Content-Transfer-Encoding: binary\r\n" dataUsingEncoding:NSASCIIStringEncoding]]; [body appendData:[[NSString stringWithFormat: @"Content-Length: %i\r\n\r\n", imageData.length] dataUsingEncoding:NSASCIIStringEncoding]]; // add the payload [body appendData:[NSData dataWithData:imageData]]; // tell the server the payload has ended [body appendData: [[NSString stringWithFormat:@"\r\n--%@--\r\n", boundary] dataUsingEncoding:NSASCIIStringEncoding]]; // add the POST data as the request body [request setHTTPMethod:@"POST"]; [request setHTTPBody:body]; // now lets make the connection to the web NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil]; NSString *returnString = [[NSString alloc] initWithData:returnData encoding:NSUTF8StringEncoding]; NSLog(@"%@", returnString); }
I did not actually compile it as he wrote here, so it probably contains some problems.
In PHP you should see that $ _REQUEST ['title'] and $ _FILES ['picture'] are set.
source share