Skip to content

Instantly share code, notes, and snippets.

@spookyvision
Created July 9, 2013 16:12
Show Gist options
  • Save spookyvision/5958714 to your computer and use it in GitHub Desktop.
Save spookyvision/5958714 to your computer and use it in GitHub Desktop.
#import <Foundation/Foundation.h>
@interface MultipartEncoder : NSObject
- (id)initWithURL:(NSString*)urlString;
-(void) addField:(NSString*)name value:(NSString*)value;
-(void) addFile:(NSString*)name data:(NSData*)fileData;
-(void) finish;
@property (nonatomic, strong) NSMutableData* data;
@property (nonatomic, strong) NSString *boundary;
@property (nonatomic, strong) NSMutableURLRequest *request;
@end
#import "MultipartEncoder.h"
@implementation MultipartEncoder
@synthesize request,boundary,data;
- (id)initWithURL:(NSString*)urlString
{
self = [super init];
if (self) {
self.boundary = @"hji0s3hrgnsai";
self.data = [NSMutableData new];
self.request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:urlString]];
[self.request setHTTPMethod:@"POST"];
NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@", self.boundary];
[self.request addValue:contentType forHTTPHeaderField: @"Content-Type"];
}
return self;
}
-(void) addField:(NSString*)name value:(NSString*)value {
NSString *header = [NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\"", name];
[self addPart:[value dataUsingEncoding:NSUTF8StringEncoding] headers:@[header]];
}
-(void) addFile:(NSString*)name data:(NSData*)fileData {
NSString *fileName = @"test.jpg";
NSString *fieldHeader = [NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\"; filename=\"%@\"", name, fileName];
NSString *fileHeader = @"Content-Type: application/octet-stream";
[self addPart:fileData headers:@[fieldHeader, fileHeader]];
}
-(void) addPart:(NSData*)part headers:(NSArray*)headers {
[self.data appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n", self.boundary] dataUsingEncoding:NSUTF8StringEncoding]];
for (NSString* header in headers) {
[self.data appendData:[[header stringByAppendingString:@"\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
}
[self.data appendData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
[self.data appendData:[NSData dataWithData:part]];
}
-(void) finish {
[self.data appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n", self.boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[self.request setHTTPBody:self.data];
}
@end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment