AFNetworking multipart / form-data POST отправляет неверный массив JSON-словарей

Я не знаю, является ли это ошибкой, или я просто делаю это неправильно.

Этот пост выглядел так близко к решению для меня, но не: AFNetworking публикует массивы JSON в виде нескольких однократных словарей

Я пытаюсь отправить POST multipart / form-data с изображением и передать словарь (который содержит массив словарей) в «параметры» для отправки в формате JSON.

Словарь:

NSDictionary *parameters = @{@"photos" : @[@{@"photoID":@"0", @"imageURL":@"0", @"imageName":@"0"},
@{@"photoID":@"1", @"imageURL":@"1", @"imageName":@"1"},
@{@"photoID":@"2", @"imageURL":@"2", @"imageName":@"2"}]};

Запрос:

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
manager.requestSerializer = [AFJSONRequestSerializer serializer];


[manager POST:@"myURL" parameters:parameters constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
[formData appendPartWithFileData:imageData name:@"image" fileName:@"image" mimeType:@"image/png"];

} success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"Success: %@", responseObject);

} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"Error: %@", error);
}];

Изображение отправляется и принимается нормально, однако полученный на сервере JSON выглядит так:

{
photos =     (
{
imageName = 0;
},
{
imageURL = 0;
},
{
photoID = 0;
},
{
imageName = 1;
},
{
imageURL = 1;
},
{
photoID = 1;
},
{
imageName = 2;
},
{
imageURL = 2;
},
{
photoID = 2;
}
);
}

…массив из нескольких однократных словарей 🙁

Вместо:

{
photos =     (
{
imageName = 0;
imageURL = 0;
photoID = 0;
},
{
imageName = 1;
imageURL = 1;
photoID = 1;
},
{
imageName = 2;
imageURL = 2;
photoID = 2;
}
);
}

Любая помощь будет отличной, спасибо!

0

Решение

Параметры отправляются как form-data при построении запроса из нескольких частей в AFNetworking, Отправить JSON закодированные тела в вашем ответе из нескольких частей, вам нужно будет их сериализовать и добавить к ответу из нескольких частей, как ваш сервер ожидает их получения.

В зависимости от того, как ваш сервер ожидает их, вы можете использовать что-то вроде:

 NSData *jsonData = [NSJSONSerialization dataWithJSONObject:myJSON options:0 error:nil];

[formData appendPartWithFileData:jsonData name:@"name" fileName:nil mimeType:@"application/json"];
2

Другие решения

Если вы хотите загрузить несколько изображений и оставить имя параметра одинаковым для всех изображений, сделайте это, как показано ниже:

NSDictionary *parameters = @{@"user_key": @"*****"};
NSMutableURLRequest *request = [[AFHTTPRequestSerializer serializer] multipartFormRequestWithMethod:@"POST" URLString:queryStringss parameters:parameters constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
NSError *error;
[formData appendPartWithFileData:imageData name:@"photo_file[0]" fileName:@"Picture44.png" mimeType:@"image/png"];
[formData appendPartWithFileData:imageData1 name:@"photo_file[1]" fileName:@"Picture45.png" mimeType:@"image/png"];
} error:nil];

Таким образом, файлы будут отправлены в виде массива на сервер.

0

По вопросам рекламы [email protected]