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就大功告成啦!
这篇文章只是专注于写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就大功告成啦!
相关文章推荐
- RPC failed; result=22, HTTP code = 411
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 个人信息安全报告发布:有 APP 每分钟调用位置权限 1468 次
- 不可修补的 iOS 漏洞可能导致 iPhone 4s 到 iPhone X 永久越狱
- 下载量超过一亿的流行应用被发现含有恶意模块
- iOS 12.4 系统遭黑客破解,漏洞危及数百万用户
- HTTP Header 属性列表
- 每日安全资讯:NSO,一家专业入侵 iPhone 的神秘公司
- nginx中http核心模块的配置指令2
- nginx中http核心模块的配置指令3
- nginx中http核心模块的配置指令4
- nginx中http的fastcgi模块的配置指令1
- [转][源代码]Comex公布JailbreakMe 3.0源代码
- 苹果与Siri的七年之痒:“宫斗”戏码不断上演