AFNetworking multipart/form-data POST 发送不正确的 JSON 字典数组
Posted
技术标签:
【中文标题】AFNetworking multipart/form-data POST 发送不正确的 JSON 字典数组【英文标题】:AFNetworking multipart/form-data POST sends incorrect JSON array of dictionaries 【发布时间】:2015-09-15 19:13:17 【问题描述】:我不知道这是一个错误还是我做得不对。
这篇文章看起来非常接近为我解决它,但没有:AFNetworking posts JSON arrays as multiple single-entry dictionaries
我正在尝试发送带有图像的 multipart/form-data POST 并将字典(包含字典数组)传递给“参数”以作为 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;
);
任何帮助都会很棒,谢谢!
【问题讨论】:
【参考方案1】:在AFNetworking
中构造多部分请求时,参数以form-data
发送。要在您的多部分响应中发送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];
通过这种方式,文件将作为数组发送到服务器。
【讨论】:
以上是关于AFNetworking multipart/form-data POST 发送不正确的 JSON 字典数组的主要内容,如果未能解决你的问题,请参考以下文章
通过Ajax方式上传文件,使用FormData进行Ajax请求