added file upload support

This commit is contained in:
Tony Tam 2013-03-13 23:45:26 -07:00
parent c47e553425
commit 0a7e606650
4 changed files with 77 additions and 28 deletions

View File

@ -21,18 +21,20 @@
-(NSString*) escapeString:(NSString*) string;
-(void) dictionary:(NSString*) path
method:(NSString*) method
queryParams:(NSDictionary*) queryParams
body:(id)body
headerParams:(NSDictionary*) headerParams
completionBlock:(void (^)(NSDictionary*, NSError *))completionBlock;
-(void) dictionary: (NSString*) path
method: (NSString*) method
queryParams: (NSDictionary*) queryParams
body: (id)body
headerParams: (NSDictionary*) headerParams
contentType: contentType
completionBlock: (void (^)(NSDictionary*, NSError *))completionBlock;
-(void) stringWithCompletionBlock:(NSString*) path
method:(NSString*) method
queryParams:(NSDictionary*) queryParams
body:(id)body
headerParams:(NSDictionary*) headerParams
completionBlock:(void (^)(NSString*, NSError *))completionBlock;
-(void) stringWithCompletionBlock: (NSString*) path
method: (NSString*) method
queryParams: (NSDictionary*) queryParams
body: (id)body
headerParams: (NSDictionary*) headerParams
contentType: contentType
completionBlock: (void (^)(NSString*, NSError *))completionBlock;
@end

View File

@ -1,4 +1,5 @@
#import "NIKApiInvoker.h"
#import "NIKFile.h"
@implementation NIKApiInvoker
@ -58,12 +59,13 @@ static NSInteger __LoadingObjectsCount = 0;
kCFStringEncodingUTF8));
}
-(void) dictionary:(NSString*) path
method:(NSString*) method
queryParams:(NSDictionary*) queryParams
body:(id) body
headerParams:(NSDictionary*) headerParams
completionBlock:(void (^)(NSDictionary*, NSError *))completionBlock
-(void) dictionary: (NSString*) path
method: (NSString*) method
queryParams: (NSDictionary*) queryParams
body: (id) body
headerParams: (NSDictionary*) headerParams
contentType: (NSString*) contentType
completionBlock: (void (^)(NSDictionary*, NSError *))completionBlock
{
NSMutableString * requestUrl = [NSMutableString stringWithFormat:@"%@", path];
NSString * separator = nil;
@ -111,6 +113,21 @@ static NSInteger __LoadingObjectsCount = 0;
data = [NSJSONSerialization dataWithJSONObject:body
options:kNilOptions error:&error];
}
else if ([body isKindOfClass:[NIKFile class]]){
NIKFile * file = (NIKFile*) body;
NSString *boundary = @"Fo0+BAr";
contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@", boundary];
// add the body
NSMutableData *postBody = [NSMutableData data];
[postBody appendData:[[NSString stringWithFormat:@"--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[postBody appendData:[@"Content-Disposition: form-data; name= \"some_name\"\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
[postBody appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"image_file\"; filename=\"%@\"\r\n", file] dataUsingEncoding:NSUTF8StringEncoding]];
[postBody appendData:[[NSString stringWithFormat:@"Content-Type: %@\r\n\r\n", file.mimeType] dataUsingEncoding:NSUTF8StringEncoding]];
[postBody appendData: file.data];
[postBody appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];
}
else if ([body isKindOfClass:[NSArray class]]){
data = [NSJSONSerialization dataWithJSONObject:body
options:kNilOptions error:&error];
@ -122,7 +139,7 @@ static NSInteger __LoadingObjectsCount = 0;
[request setValue:postLength forHTTPHeaderField:@"Content-Length"];
[request setHTTPBody:data];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[request setValue:contentType forHTTPHeaderField:@"Content-Type"];
}
// Handle caching on GET requests
@ -174,12 +191,13 @@ static NSInteger __LoadingObjectsCount = 0;
}];
}
-(void) stringWithCompletionBlock:(NSString*) path
method:(NSString*) method
queryParams:(NSDictionary*) queryParams
body:(id) body
headerParams:(NSDictionary*) headerParams
completionBlock:(void (^)(NSString*, NSError *))completionBlock
-(void) stringWithCompletionBlock: (NSString*) path
method: (NSString*) method
queryParams: (NSDictionary*) queryParams
body: (id) body
headerParams: (NSDictionary*) headerParams
contentType: (NSString*) contentType
completionBlock: (void (^)(NSString*, NSError *))completionBlock
{
NSMutableString * requestUrl = [NSMutableString stringWithFormat:@"%@", path];
NSString * separator = nil;
@ -227,6 +245,21 @@ static NSInteger __LoadingObjectsCount = 0;
data = [NSJSONSerialization dataWithJSONObject:body
options:kNilOptions error:&error];
}
else if ([body isKindOfClass:[NIKFile class]]){
NIKFile * file = (NIKFile*) body;
NSString *boundary = @"Fo0+BAr";
contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@", boundary];
// add the body
NSMutableData *postBody = [NSMutableData data];
[postBody appendData:[[NSString stringWithFormat:@"--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[postBody appendData:[@"Content-Disposition: form-data; name= \"some_name\"\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
[postBody appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"image_file\"; filename=\"%@\"\r\n", file] dataUsingEncoding:NSUTF8StringEncoding]];
[postBody appendData:[[NSString stringWithFormat:@"Content-Type: %@\r\n\r\n", file.mimeType] dataUsingEncoding:NSUTF8StringEncoding]];
[postBody appendData: file.data];
[postBody appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];
}
else if ([body isKindOfClass:[NSArray class]]){
data = [NSJSONSerialization dataWithJSONObject:body
options:kNilOptions error:&error];
@ -238,7 +271,7 @@ static NSInteger __LoadingObjectsCount = 0;
[request setValue:postLength forHTTPHeaderField:@"Content-Length"];
[request setHTTPBody:data];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[request setValue:contentType forHTTPHeaderField:@"Content-Type"];
}

View File

@ -9,5 +9,4 @@
- (id) initWithValues: (NSString*)input;
-(NSString*) toString;
@end
@end

View File

@ -1,5 +1,6 @@
{{#operations}}
#import "{{classname}}.h"
#import "NIKFile.h"
{{#imports}}#import "{{import}}.h"
{{/imports}}
{{newline}}
@ -48,6 +49,9 @@ static NSString * basePath = @"{{basePath}}";
{{#pathParams}}[requestUrl replaceCharactersInRange: [requestUrl rangeOfString:[NSString stringWithFormat:@"%@%@%@", @"{", @"{{baseName}}", @"}"]] withString: [_api escapeString:{{paramName}}]];
{{/pathParams}}
NSString* contentType = @"application/json";
NSMutableDictionary* queryParams = [[NSMutableDictionary alloc] init];
{{#queryParams}}if({{paramName}} != nil)
queryParams[@"{{baseName}}"] = {{paramName}};
@ -77,6 +81,10 @@ static NSString * basePath = @"{{basePath}}";
else if([body isKindOfClass:[NSString class]]) {
bodyDictionary = body;
}
else if([body isKindOfClass: [NIKFile class]]) {
contentType = @"form-data";
bodyDictionary = body;
}
else{
NSLog(@"don't know what to do with %@", body);
}
@ -97,6 +105,7 @@ static NSString * basePath = @"{{basePath}}";
queryParams: queryParams
body: bodyDictionary
headerParams: headerParams
contentType: contentType
completionBlock: ^(NSDictionary *data, NSError *error) {
if (error) {
{{#returnBaseType}}completionBlock(nil, error);{{/returnBaseType}}
@ -138,6 +147,7 @@ static NSString * basePath = @"{{basePath}}";
queryParams:queryParams
body:bodyDictionary
headerParams:headerParams
contentType:contentType
completionBlock:^(NSString *data, NSError *error) {
if (error) {
completionBlock(nil, error);
@ -153,6 +163,7 @@ static NSString * basePath = @"{{basePath}}";
queryParams:queryParams
body:bodyDictionary
headerParams:headerParams
contentType:contentType
completionBlock:^(NSString *data, NSError *error) {
if (error) {
completionBlock(error);
@ -169,6 +180,7 @@ static NSString * basePath = @"{{basePath}}";
queryParams:queryParams
body:bodyDictionary
headerParams:headerParams
contentType:contentType
completionBlock:^(NSDictionary *data, NSError *error) {
if (error) {
{{#returnBaseType}}completionBlock(nil, error);{{/returnBaseType}}
@ -202,6 +214,8 @@ static NSString * basePath = @"{{basePath}}";
{{#pathParams}}[requestUrl replaceCharactersInRange: [requestUrl rangeOfString:[NSString stringWithFormat:@"%@%@%@", @"{", @"{{baseName}}", @"}"]] withString: [_api escapeString:{{paramName}}]];
{{/pathParams}}
NSString* contentType = @"application/json";
NSMutableDictionary* queryParams = [[NSMutableDictionary alloc] init];
{{#queryParams}}if({{paramName}} != nil)
queryParams[@"{{baseName}}"] = {{paramName}};
@ -250,6 +264,7 @@ static NSString * basePath = @"{{basePath}}";
queryParams:queryParams
body:bodyDictionary
headerParams:headerParams
contentType:contentType
completionBlock:^(NSDictionary *data, NSError *error) {
if (error) {
{{#returnBaseType}}completionBlock(nil, error);{{/returnBaseType}}