Skip to content

Instantly share code, notes, and snippets.

@mombrea
Created January 17, 2014 01:49
Show Gist options
  • 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
}
}];
@Asha149
Copy link

Asha149 commented Oct 17, 2014

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

@martinrybak
Copy link

Thanks very much for this!

@jonathanjimenez
Copy link

Thanks :D

@jonathanjimenez
Copy link

God bless you.

@datwiki
Copy link

datwiki commented Apr 13, 2015

hi, thanks for posting the code. i am sticking with 2 questions:

  1. what exactly is the object "image"
  2. name=%@; filename=imageName.jpg\r\n" => if we are selecting image from device library then what will replace the "imageName.jpg"?

Thanks much for your help

@NareshKalakuntla
Copy link

Thank you 😄 This helped me a lot.

@SushilSharma12
Copy link

What to do in case of video ?
How to upload video with multipart?

Copy link

ghost commented Jul 29, 2015

Finally it worked, thank you for your code, I had extra "s 👯

@shpakovski
Copy link

Thank you very much!

@asefnoor
Copy link

Thanks. worked like charm.

@Dhavalmaheta
Copy link

Thanks a lot..
its working fine.

@zaczh
Copy link

zaczh commented Apr 17, 2016

very useful!

@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