最近在做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就大功告成啦!