iOS file Upload
In iOS to upload files a lot of ways, such as the file Base64 direct post, originally intended to do so, found a variety of uncomfortable, service end also all kinds of uncomfortable, so simply use the standard HTTP upload protocol Mutipart to make a upload, the specific code as follows
Header file
?
1234567891011 |
@interface HttpRequest : NSObject +(id)upload:(NSString *)url widthParams:(NSDictionary *)params; @end @interface FileDetail : NSObject @property(strong,nonatomic) NSString *name; @property(strong,nonatomic) NSData *data; +(FileDetail *)fileWithName:(NSString *)name data:(NSData *)data; @end |
Main file?
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 666768 |
//
// HttpRequest.m
// recofm
//
// Created by reco on 13-12-25.
// Copyright (c) 2013年 reco. All rights reserved.
//
#import "HttpRequest.h"
#define BOUNDARY @"----------cH2gL6ei4Ef1KM7cH2KM7ae0ei4gL6"
@implementation HttpRequest
+(id)upload:(NSString *)url widthParams:(NSDictionary *)params {
NSError *err = nil;
NSMutableURLRequest *myRequest = [ [NSMutableURLRequest alloc] initWithURL: [NSURL URLWithString:url] cachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData timeoutInterval:0];
[myRequest setHTTPMethod:@
"POST"
];
[myRequest setValue:[@
"multipart/form-data; boundary=" stringByAppendingString:BOUNDARY] forHTTPHeaderField:@
"Content-Type"
];
NSMutableData *body = [NSMutableData data];
for
(NSString *key in params) {
id content = [params objectForKey:key];
if ([content isKindOfClass:[NSString
class
]] || [content isKindOfClass:[NSNumber
class
]]) {
NSString *param = [NSString stringWithFormat:@
"--%@\r\nContent-Disposition: form-data; name=\"%@\"\r\n\r\n%@\r\n"
,BOUNDARY,key,content,nil];
[body appendData:[param dataUsingEncoding:NSUTF8StringEncoding]];
}
else if
([content isKindOfClass:[FileDetail
class
]]) {
FileDetail *file = (FileDetail *)content;
NSString *param = [NSString stringWithFormat:@
"--%@\r\nContent-Disposition: form-data; name=\"%@\";filename=\"%@\"\r\nContent-Type: application/octet-stream\r\n\r\n"
,BOUNDARY,key,file.name,nil];
[body appendData:[param dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:file.data];
[body appendData:[@
"\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
}
}
NSString *endString = [NSString stringWithFormat:@
"--%@--"
,BOUNDARY];
[body appendData:[endString dataUsingEncoding:NSUTF8StringEncoding]];
[myRequest setHTTPBody:body];
NSData *returnData = [NSURLConnection sendSynchronousRequest:myRequest returningResponse:nil error:&err];
id jsonObj = [NSJSONSerialization JSONObjectWithData:returnData options:noErr error:nil];
return jsonObj;
}
@end
@implementation FileDetail
+(FileDetail *)fileWithName:(NSString *)name data:(NSData *)data {
FileDetail *file = [[self alloc] init];
file.name = name;
file.data = data;
return file;
}
@end
|
How to use
12345678 |
NSData *imageData = UIImageJPEGRepresentation(image,0.8);
FileDetail *file = [FileDetail fileWithName:@
"avatar.jpg" data:imageData];
NSDictionary *params = [NSDictionary dictionaryWithObjectsAndKeys:
file,@
"file"
,
@
"upload"
,@
"action"
,
nil nil];
NSDictionary *result = [HttpRequest upload:@
"http://upload.corp.reco.cn/uploadimage" widthParams:params];
NSLog(@
"%@"
,result);
|
iOS File Upload