使用multipart / mixed在ios中上传图像和json

时间:2012-11-29 06:01:29

标签: ios

我是ios webservices的新手,所以我在最近2到3天遇到了问题, 我必须向服务器发送一个请求,它有多个部分,如image和json,我试图使用multipart / form-data发送我的请求,但由于某种原因,服务器无法获取请求,任何人都可以帮助我解决这个问题

我正在使用的代码是

NSData *imageData = UIImagePNGRepresentation(img);

   NSMutableURLRequest *theRequest =[NSMutableURLRequest requestWithURL:theURL];

    NSString *boundary = [NSString stringWithFormat:@"---------------------------14737809831466499882746641449"];

 NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@", boundary];

    [theRequest addValue:contentType forHTTPHeaderField:@"Content-Type"];
[theRequest setHTTPMethod:@"POST"];


 NSMutableString *theBody = [[NSMutableString alloc]init];

    [theBody appendString:[NSString stringWithFormat:@"\r\n--%@\r\n", boundary]];

     [theBody appendString:[NSString stringWithFormat:@"Content-Type: application/json\r\n\r\n"]];

//append The Json string

[theBody appendString:myJsonString];

[theBody appendString:[NSString stringWithFormat:@"%@", boundary]]; 

//this appends the image

[theBody appendString:[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"data\"; filename=\"photo\""]];

[theBody appendString:[NSString stringWithFormat:@"Content-Type: image/png\r\n\r\n"]];

[theBody appendString:[NSString stringWithFormat:@"%@",imageData]];

[theBody appendString:[NSString stringWithFormat:@"\r\n--%@\r\n", boundary] ];

[theRequest setHTTPBody:[theBody dataUsingEncoding:NSUTF8StringEncoding]];

2 个答案:

答案 0 :(得分:0)

我觉得直接使用NSMutableURLRequest很复杂,请尝试使用“ASIFormDataRequest”,它很容易使用。它们还有许多其他功能,如缓存响应,取消请求。文档为here

答案 1 :(得分:0)

所以,基本上我得到的是你在JSON内发送图片时遇到的问题。

在这种情况下,您首先要做的就是在NSData中对图像进行细分,然后在数据之后需要Base64编码器方案,如下所示:

[Base64 encode:(NSData)data]

现在,您可以存储在您需要的结构中,比如说如果您需要存储在字典中,那么您可以实现相同的目标,如:

NSMutableDictionary* dict = [NSMutableDictionary new];
[dict setObject:[Base64 encode:data] forKey:@"imageBytes"]; // I did in single step but if you need you can do two steps...

现在,只需使用之前使用的JSON

如有任何疑虑,请与我联系。 :)