Skip to content

Instantly share code, notes, and snippets.

@mombrea
Created January 17, 2014 01:49
Show Gist options
  • Star 52 You must be signed in to star a gist
  • Fork 19 You must be signed in to fork a gist
  • Save mombrea/8467128 to your computer and use it in GitHub Desktop.
Save mombrea/8467128 to your computer and use it in GitHub Desktop.
example of a multi-part form post in objective-c
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:@"REST URL PATH"]];
NSData *imageData = UIImageJPEGRepresentation(image, 1.0);
[request setCachePolicy:NSURLRequestReloadIgnoringLocalCacheData];
[request setHTTPShouldHandleCookies:NO];
[request setTimeoutInterval:60];
[request setHTTPMethod:@"POST"];
NSString *boundary = @"unique-consistent-string";
// set Content-Type in HTTP header
NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@", boundary];
[request setValue:contentType forHTTPHeaderField: @"Content-Type"];
// post body
NSMutableData *body = [NSMutableData data];
// add params (all params are strings)
[body appendData:[[NSString stringWithFormat:@"--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=%@\r\n\r\n", @"imageCaption"] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithFormat:@"%@\r\n", @"Some Caption"] dataUsingEncoding:NSUTF8StringEncoding]];
// add image data
if (imageData) {
[body appendData:[[NSString stringWithFormat:@"--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=%@; filename=imageName.jpg\r\n", @"imageFormKey"] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[@"Content-Type: image/jpeg\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:imageData];
[body appendData:[[NSString stringWithFormat:@"\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
}
[body appendData:[[NSString stringWithFormat:@"--%@--\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
// setting the body of the post to the reqeust
[request setHTTPBody:body];
// set the content-length
NSString *postLength = [NSString stringWithFormat:@"%d", [body length]];
[request setValue:postLength forHTTPHeaderField:@"Content-Length"];
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue currentQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {
if(data.length > 0)
{
//success
}
}];
@tvPM123
Copy link

tvPM123 commented Apr 19, 2016

Hi. Thanks for the example. Works well.
Im facing issues uploading multiple images using the above code. It only accepts the first image. #ios

Please help to execute this code for multiple images

@sweatyc
Copy link

sweatyc commented Jun 23, 2016

What if i want to upload gif (to Giphy.com)?

@mohsinka
Copy link

Awesome! So simplistic.

@samuelDeveloperiOS
Copy link

Great!

@brunomunizaf
Copy link

Thank you, you have just saved me from using AFNetworking and/or others. I'm facing an issue now with the HTTP Body - too long when trying to upload a huge gif file. :(

@Rj707
Copy link

Rj707 commented Dec 8, 2017

@Asha149 did you find any solution?

@Rj707
Copy link

Rj707 commented Dec 8, 2017

and can we upload an array of images to server? using NSURLConnection

@Supertecnoboff
Copy link

What if you want to post a video using multipart/form-data ?

@erimkurt
Copy link

erimkurt commented May 2, 2018

Thanks man! You saved me...

@krasnorutsky
Copy link

Thank you! You saved my day

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment