使用 json 数据和使用 afnetworking 的多部分请求
Posted
技术标签:
【中文标题】使用 json 数据和使用 afnetworking 的多部分请求【英文标题】:request with json data and multipart using afnetworking 【发布时间】:2014-09-28 23:07:01 【问题描述】:我正在使用 AFNetworking 2.0,需要同时使用 json 数据和多张图像构造对我的服务器的请求。
我可以想象的是请求将采用以下结构:
Content-Type multipart/form-data;boundary=abc
--abc
"title":"Product discussion","attendee":["id":"1","id":"2","id":"3","id":"4","id":"5"]
--abc
Content-Disposition: form-data; name="img"
Content-Type: image/png
...image data...
--abc--
这里只是简化的结构。真正的会议数据要复杂得多,层次多,所以我认为最好使用json。
但是我不知道如何使用 afnetworking 构建这样的数据结构,例如
NSMutableDictionary *parameters = [NSMutableDictionary dictionary];
[parameters setValue:meeting.title forKey:@"title"];
NSMutableArray *attendeeList = [[NSMutableArray alloc]init];
for(Attendee *attendee in meeting.attendeeList)
NSMutableDictionary *attendeeDictionary = [[NSMutableDictionary alloc]init];
[attendeeDictionary setValue:attendeeID forKey:@"id"];
[attendeeList addObject: attendeeDictionary];
[parameters setValue:attendeeList forKey:@"attendee"];
httpClient.requestSerializer = [AFJSONRequestSerializer serializer];
[httpClient POST:@"createappointment.php" parameters:parameters constructingBodyWithBlock:^(id<AFMultipartFormData> formData)
UIImage *image = [UIImage imageNamed:@"image.png"];
NSData *imageData = UIImagePNGRepresentation(image);
[formData appendPartWithFileData:imageData
name:@"img"
fileName:@"img.png"
mimeType:@"image/png"];
success:....
但代码似乎忽略了 AFJSONRequestSerializer,并将会议标题和与会者 ID 以 POST 数组的形式放置。
在服务器端是 PHP。通常我可以从 $_FILE 获取图像,从 php://input + json_decode 获取 json 数据,但是在这种情况下我不知道,解析上述结构的最佳方法是什么?
有没有人也满足这样的要求以及如何在ios和服务器端正确解决?
【问题讨论】:
【参考方案1】:所以在这种情况下,您可以从 $_POST
而不是 $_FILES
获取它,或者您可以使用 file_get_contents("php://input")
【讨论】:
我无法将 json 数据放入 $_POST,并且“php://input is not available with enctype="multipart/form-data"(php.net/manual/en/wrappers.php.php)以上是关于使用 json 数据和使用 afnetworking 的多部分请求的主要内容,如果未能解决你的问题,请参考以下文章
使用 Asihttprequest 和 iPhone 的 Json 框架解析 JSON 数据