我正在尝试发布带有附加文件的对象。
NSMutableURLRequest *request =
[objectManager multipartFormRequestWithObject:reqDocObj
method:RKRequestMethodPOST
path:@"syncDocument.json"
parameters:nil
constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
[formData appendPartWithFileData:UIImagePNGRepresentation([UIImage imageNamed:@"graybox.png"])
name:@"image"
fileName:@"some_file"
mimeType:@"image/jpeg"];
}];
RKObjectRequestOperation *operation =
[objectManager
objectRequestOperationWithRequest:request
success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) {
}
failure:^(RKObjectRequestOperation *operation, NSError *error) {
NSLog(@"WS: errore operazione di richiesta %@",error);
}
];
[objectManager enqueueObjectRequestOperation:operation];
objectManager
配置为:
[objectManager setAcceptHeaderWithMIMEType:RKMIMETypeJSON];
[objectManager setRequestSerializationMIMEType:RKMIMETypeJSON];
objectManager.requestSerializationMIMEType = RKMIMETypeJSON;
[编辑]
我的mapepd对象是SynchDocObj
:
requestDocMapping = [RKObjectMapping mappingForClass:[SynchDocObj class]];
[requestDocMapping addAttributeMappingsFromDictionary:mappingDocDict];
问题是:
1) 在RKlogs中,将request.body = null
和JSON对象放入form-data
2) 服务器无法解码正文,因为它是 null
我的问题是:
1) 我是否以错误的方式发送 JSON 对象?
2) 如果是,如何通过文件上传发送 JSON 对象,即作为多部分请求? 问候!
[解决方案]
根据答案的建议,我认为解决方案是1)从表单数据而不是正文中检索映射对象; 2) 或者发布一个 nil 对象并在表单数据中放入一个 JSON 字符串。
最佳答案
这个:
[objectManager setRequestSerializationMIMEType:RKMIMETypeJSON];
objectManager.requestSerializationMIMEType = RKMIMETypeJSON;
是同一件事的两种不同表达方式 - 而您不想使用其中任何一种。您需要以表单 URL 编码(默认值)的形式发送请求。
最简单的方法是使用与当前代码中相同的表单来创建请求,提前生成 JSON,然后使用 appendPartWithFormData:name:
将其添加到请求中(只需在添加文件之前)。
要生成 JSON,您可以使用 RestKit (RKMappingOperation
),或者您可以只创建内容字典/数组,然后使用 NSJSONSerialization
序列化要添加的对象到请求。
关于ios - Post JSON Body + MultiPart RestKit 0.2x 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20641720/