iOS文件上傳
在ios里來上傳文件的方法很多,比如把文件base64直接post,本來打算這樣做的,發現各種不爽,服務端收起來也各種不爽,所以干脆用標準的http上傳協議mutipart來搞個上傳就好,具體代碼如下
頭文件
@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 </pre><br />
main文件
</div>
</div>
//
// 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 </pre><br />
使用方法
本文由用戶
jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!
sesese色