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

本文介绍了如何在iOS应用中使用POST方法上传包含多个字段和图片的数据。通过定义一个边界标识符,创建起始和结束分割线,并按特定格式构建HTTPBody,将字段和图片数据转化为NSData进行发送。详细步骤包括设置字段和值,转换并添加图片数据,以及添加结束符。最后,将构建好的HTTPBody赋值给NSUrlRequest。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值