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

最近在做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)