错误的多部分 - 服务器上的 POST(json + 图像)

Posted

技术标签:

【中文标题】错误的多部分 - 服务器上的 POST(json + 图像)【英文标题】:Wrong multipart - POST on the server (json + image) 【发布时间】:2013-10-15 01:27:46 【问题描述】:

服务器看不到部分“token”和“name+_time”

我的代码

NSArray *keysParams = [NSArray arrayWithObjects:@"time",nil];
NSArray *valuesParams = [NSArray arrayWithObjects:time, nil];
NSDictionary *dictParams = [NSDictionary dictionaryWithObjects:valuesParams       forKeys:keysParams];

NSError *writeError = nil;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dictParams options:NSJSONWritingPrettyPrinted error:&writeError];


NSData *imageData = UIImageJPEGRepresentation(getImage1, 0.8);
NSString *boundary = @"&&3rewfwefwfewfhufrbewfuweriwefr";
NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@", boundary];
[request addValue:contentType forHTTPHeaderField:@"Content-Type"];

NSMutableData *body = [NSMutableData data];

//this appends the image
[body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\"; filename=\"photo.jpg\"\r\n",fileName] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[@"Content-Type: image/jpeg\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[NSData dataWithData:imageData]];
//json
[body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@_time\" \r\n",fileName] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:jsonData];
[body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
//token
[body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"token\" \r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[token dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[request setHTTPBody:body];

请求正文

imagename(file)
/imagename_time/ - part name

time:100

/token/ - part name
"string"

我在某个地方有一个错误,但我找不到它。我第一次写多部分帖子。 谢谢!

【问题讨论】:

你没说是什么bug?? 很明显你的陈述“一切都写对了”是错误的,否则你不会有这个问题。 @SantaClaus,是的,有一个错误。我找不到它。 @hussainShabbir 我的错误“未发送令牌”和未找到“part _time” 参考我的答案以将图片上传到服务器,Refer post hereGood Luck 【参考方案1】:

我找到了解决方案。我在错误的“边界”中失败了

工作代码:

//  image
[body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\"; filename=\"photo.jpg\"\r\n",fileName] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[@"Content-Type: image/jpeg\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[NSData dataWithData:imageData]];
[body appendData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]];

//  json
[body appendData:[[NSString stringWithFormat:@"--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@_time\" \r\n\r\n",fileName"] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithFormat:@"%@", jsonString] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]];

//  token
[body appendData:[[NSString stringWithFormat:@"--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"token\"\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[token dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]];

// close form
[body appendData:[[NSString stringWithFormat:@"--%@--\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];


// setting the body of the post to the reqeust
[request setHTTPBody:body];

感谢您对我的问题的回答 =)

【讨论】:

我也有同样的问题,无法用你的解决方案解决,你提到的“边界”有什么问题。

以上是关于错误的多部分 - 服务器上的 POST(json + 图像)的主要内容,如果未能解决你的问题,请参考以下文章

具有特定 JSON 要求的多部分表单数据 POST

REST服务上的错误请求错误使用POST(json数据)调用方法?

错误请求 - Post 方法 - JSON DateTime 问题

使用 Alamofire 的多部分 POST

Airborne的多部分POST,没有“缺少开始边界”

Apache http客户端在输入请求的多部分上抛出错误