我正在尝试使用 AFNetworking 库从我的 ios 应用程序发送带有图像的嵌套 json。我能够成功发送 json 数据和图像,但在服务器中 json 结构不同。
我的应用内的 HTTP 请求:-
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
NSDictionary *params = @{@"requestData":@{@"username":@"200OK",@"password":@"password"}};
manager.requestSerializer = [AFJSONRequestSerializer serializer];
manager.responseSerializer = [AFJSONResponseSerializer serializer];
[manager POST:Self_URL
parameters:params constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
[formData appendPartWithFileData:UIImagePNGRepresentation(image)
name:@"file"
fileName:@"file"
mimeType:@"image/jpeg"];
} success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"Response: %@", responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"Error: %@", error);
}];
所以在我的 Django 服务器中,我期望参数作为与参数相同的字典,但是 request.POST
是
content_type---> multipart/form-data; boundary=Boundary+247685AB6DF2B3BA
<QueryDict: {'requestData[password]': [u'password'], 'requestData[username]': [u'200OK']}>
如何发送 json 数据以便从服务器轻松访问? 我遗漏了什么或出了什么问题?
最佳答案
constructingBodyWithBlock
正在覆盖您的 AFJSONRequestSerializer
并且您的字典被编码为表单数据。无法同时为请求提供两种内容类型(multipart/form-data
和 application/json
),因此您必须这样做另一种方式。
一种可能性是将 JSON 编码为 NSData 对象并将其与图像数据一起附加到多部分表单:
NSError *error = nil;
NSData *paramData = [NSJSONSerialization dataWithJSONObject:params
options:0
error:&error];
[formData appendPartWithFileData:paramData
name:@"params"
filename:@"params"
mimeType:@"application/json"]
您可以通过request.FILES['params']
访问序列化参数。尽管是 mime 类型,但我怀疑 django 是否会自动将 JSON 数据解析为字典,但您可以使用 json.loads
手动执行此操作。
关于ios - AFNetworking 2.x 中带有多部分/表单数据的嵌套 Json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33233828/