使用afnetworking请求json数据和multipart

时间:2014-09-28 23:07:01

标签: php ios json multipartform-data afnetworking-2

我正在使用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 个答案:

答案 0 :(得分:0)

因此,在这种情况下,您可以从$_POST而不是$_FILES获取,或者您可以使用file_get_contents("php://input")