您的位置:首页 > 移动开发 > IOS开发

ios文件,图片上传服务器

2015-10-18 00:12 363 查看
- (void)upload:(NSString *)name filename:(NSString *)filename mimeType:(NSString *)mimeType data:(NSData *)data parmas:(NSDictionary *)params
{
// 文件上传
NSURL *url = [NSURLURLWithString:@"http://123.57.89.97:7070/t2o/app/member/modifyFace"];
NSMutableURLRequest *request = [NSMutableURLRequestrequestWithURL:url];
request.HTTPMethod =@"POST";

// 设置请求体
NSMutableData *body = [NSMutableDatadata];

/***************文件参数***************/
// 参数开始的标志
[body appendData:YYEncode(@"--YY\r\n")];
// name : 指定参数名(必须跟服务器端保持一致)
// filename : 文件名
NSString *disposition = [NSStringstringWithFormat:@"Content-Disposition: form-data; name=\"%@\"; filename=\"%@\"\r\n", name, filename];
[body appendData:YYEncode(disposition)];
NSString *type = [NSStringstringWithFormat:@"Content-Type: %@\r\n", mimeType];
[body appendData:YYEncode(type)];

[body appendData:YYEncode(@"\r\n")];
[body appendData:data];
[body appendData:YYEncode(@"\r\n")];

/***************普通参数***************/
[params enumerateKeysAndObjectsUsingBlock:^(id key,id obj, BOOL *stop) {
// 参数开始的标志
[body appendData:YYEncode(@"--YY\r\n")];
NSString *disposition = [NSStringstringWithFormat:@"Content-Disposition: form-data; name=\"%@\"\r\n", key];
[body appendData:YYEncode(disposition)];

[body appendData:YYEncode(@"\r\n")];
[body appendData:YYEncode(obj)];
[body appendData:YYEncode(@"\r\n")];
}];

/***************参数结束***************/
// YY--\r\n
[body appendData:YYEncode(@"--YY--\r\n")];
request.HTTPBody = body;

// 设置请求头
// 请求体的长度
[request setValue:[NSStringstringWithFormat:@"%zd", body.length]forHTTPHeaderField:@"Content-Length"];
// 声明这个POST请求是个文件上传
[request setValue:@"multipart/form-data; boundary=YY"forHTTPHeaderField:@"Content-Type"];

// 发送请求
[NSURLConnectionsendAsynchronousRequest:request queue:[NSOperationQueuemainQueue] completionHandler:^(NSURLResponse *response,NSData *data, NSError *connectionError) {
if (data) {
NSDictionary *dict = [NSJSONSerializationJSONObjectWithData:data options:NSJSONReadingMutableLeaveserror:nil];
NSLog(@"上传成功========%@", dict);
} else {
NSLog(@"上传失败");
}
}];
}

NSDictionary * dic = [NSDictionarydictionaryWithObjectsAndKeys:myDelegate.MEMBER_ID,@"MEMBER_ID",nil];
[selfupload:@"face"filename:@"picker.png"mimeType:@"image/png"data:data parmas:dic];

self upload:<#(NSString *)#> filename:<#(NSString *)#> mimeType:<#(NSString *)#> data:<#(NSData *)#> parmas:<#(NSDictionary *)#>


图片参数 - 图片名 - 类型 -- 本地图片路径 - - 其它参数

1、在iOS开发中,图片上传的请求体非常难写,格式要求非常严格,出一点错误都会造成上传失败,或请求数据失败,先看格式:

--Boundary+72D4CD655314C423

Content-Disposition: form-data; name="uploadFile"; filename="001.png"

Content-Type:image/png

Content-Transfer-Encoding: binary

... contents of boris.png ...

--Boundary+72D4CD655314C423--

这是一个不带其他任务参数,body中只有一张图就要写成这样

分别说明一下:

--Boundary+72D4CD655314C423 // 分割符,以“--”开头,后面的字随便写,只要不写中文即可

Content-Disposition: form-data; name="uploadFile"; filename="001.png" // 这里注明服务器接收图片的参数(类似于接收用户名的userName)及服务器上保存图片的文件名

Content-Type:image/png // 图片类型为png

Content-Transfer-Encoding: binary // 编码方式

// 这里是空一行,必不可少!!

... contents of boris.png ... // 图片数据部分

--Boundary+72D4CD655314C423-- // 分隔符后面以"--"结尾,表明结束

2、如果有其他表单数据,如传用户ID等参数,也要写成以上格式:

--Boundary+72D4CD655314C423

[align=left]Content-Disposition: form-data; name="userId"[/align]
[align=left] [/align]
[align=left]254[/align]
[align=left]--Boundary+72D4CD655314C423[/align]
[align=left]Content-Disposition: form-data; name="shopId"[/align]
[align=left] [/align]
[align=left]18718[/align]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: