您的位置:首页 > 理论基础 > 计算机网络

NSUrlRequest想使用post上传多字段多图片的httpbody写法

2016-04-29 10:53 706 查看
最近在做app与服务器通信,get方法倒是容易做,不过做post时比较混乱,刚仔细整理了一下,希望对大家能有所帮助。

这篇文章只是专注于写post方法的httpbody的,可用于上传多字段,多图片。

首先,需要定义一个边界标识符,标识符的内容可以是随机的。

NSString *BOUNDARY =
@"AaBb03x";

接下来,我们创建起始分割线和结束分割线。

起始分割线就是边界标识符前边加两个-,结束分割线是边界标识符的后面加两个-。

NSString *BeginBoundary=[[NSString
alloc]initWithFormat:@"--%@",BOUNDARY];

NSString *EndBoundary=[[NSString
alloc]initWithFormat:@"%@--",BOUNDARY];

接下来,可以加入字段及字段下的值了

生成的字符串格式是这样的:

起始分割线 换行 字段名称 换行 换行 字段内容 换行

例:

NSMutableString *body=[[NSMutableString
alloc]init];

//添加分界线,换行

[body appendFormat:@"%@\r\n",BeginBoundary];

//添加字段名称,换2行

[body appendFormat:@"Content-Disposition: form-data; name=\"name\"\r\n\r\n"];

//添加字段的值,换行

[body appendFormat:@"%@\r\n",name.text];
格式就是这样,加入下一个字段的时候就重复这3行代码,一般的做法是用一个循环,精简代码。

下面是加图片的部分

首先,图片要转换成nsdata格式:

NSData* data =
UIImageJPEGRepresentation(UIImage, 0.5);
这里我采用了压缩图片的方法,不想压缩的话后面的系数就写1,输入0.5的时候并不是说压缩后的大小是之前的0.5倍,大概会是之前的三分之一,具体想压缩到多少大家就自己试着看吧。

生成的data顺序应该是这样的:

起始分割线 换行 字段名称及格式 换行 换行 字段内容 换行

与只生成字段差不多

例:

先生成一个data实例

NSMutableData *myRequestData=[NSMutableData
data];

把之前写好的字段部分加进去

[myRequestData appendData:[body
dataUsingEncoding:NSUTF8StringEncoding]];
下面开始加入图片

//添加分界线,换行

[myRequestData appendData:[[NSString
stringWithFormat:@"%@\r\n",BeginBoundary]
dataUsingEncoding:NSUTF8StringEncoding]];

//添加content-disposition

[myRequestData appendData:[@"Content-Disposition: form-data; name=\"picture\"; filename=\"picture.png\"\r\n"
dataUsingEncoding:NSUTF8StringEncoding]];

//添加content-type,换2行

[myRequestData appendData:[@"Content-Type: application/octet-stream\r\n\r\n"
dataUsingEncoding:NSUTF8StringEncoding]];

//添加图像数据文件

[myRequestData appendData:data2];

//添加换行

[myRequestData appendData:[[NSString
stringWithFormat:@"\r\n"]
dataUsingEncoding:NSUTF8StringEncoding]];

然后添加多张图片就重复多次以上代码。

如果不需要继续添加文件了的话,在最后加上结束符

[myRequestData appendData:[EndBoundary
dataUsingEncoding:NSUTF8StringEncoding]];

最后,将myRequestData赋值给request.HTTPBody就大功告成啦!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  iOS 图片 app HTTP post