ios - AFNetworking 2.x 中带有多部分/表单数据的嵌套 Json

标签 ios objective-c django afnetworking-2

我正在尝试使用 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-dataapplication/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/

相关文章:

ios - 获取哪些 iOS 框架可用?

ios - XMPPFramework - 在 Openfire 上通过 SSL 连接

ios - NSString 到 NSDate 的转换 - 不正确的结果

ios - 如何正确使用 AVPlayer 使其在播放视频前不显示白屏?

python - Django 显示未找到的图像

objective-c - 如何获取 XML 节点的属性名称 - GDataXMLNode

ios - iPhone UITableView。如何开启音乐 App 之类的单字母字母列表?

objective-c - 同步返回 objective-c

python - 如何在没有数据库的情况下使用 JWTTokenUserAuthentication 进行身份验证

python - Django:允许从 S3 下载各种媒体文件而无需创建模型(同时隐藏 s3 存储)