使用Multipart上传图像并将多部分对象作为参数发布到弹簧mvc控制器

时间:2013-11-14 12:43:20

标签: ios rest spring-mvc multipart

您好我有一个接受多部分对象的后端。我正在努力寻找将图像作为多部分对象发布并将其作为参数传递给spring mvc控制器所涉及的方向/必要步骤。我在网上搜索了无数个小时,但我仍在努力掌握它。

基本上我是ios开发人员,我们有一个弹簧后端。我需要将图像作为多部分对象发送,因为它需要作为参数存储在后端。

我正在阅读AFNetworking,但我仍然不确定。后端是在应用程序设计之前创建的(后端已经缩小了)所以现在我正在尝试连接到那里。

如果需要,我可以提供更多信息。

我尝试了Anand K的下面的代码,但现在我得到了HTTP Status 500,并在回复中:

Request processing failed; 
nested exception is org.springframework.web.multipart.MultipartException: 
The current request is not a multipart request

以及其他一些'垃圾'

基于Adnan Ks建议的新更新 *

UIImage *image=[UIImage imageNamed:@"dub.png"];
NSData *imageData=UIImagePNGRepresentation(image);

NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
[request setURL:[NSURL URLWithString:@"http://website.com/upload/uploadOneBook.app?userID=12345&uploadFile="]];
[request setHTTPMethod:@"POST"];

NSString *boundary = @"---------------------------14737809831466499882746641449";
NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@",boundary];
[request addValue:contentType forHTTPHeaderField: @"Content-Type"];


NSMutableData *body = [NSMutableData data];
[body appendData:[[NSString stringWithFormat:@"--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithFormat:@"Content-Disposition: attachment; name=\"attachement\"; filename=\"%@\";",@"Image.png" ] dataUsingEncoding:NSUTF8StringEncoding]];

[body appendData:[@"Content-Type: application/octet-stream\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[NSData dataWithData:imageData]];
[body appendData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]];

// close form
[body appendData:[[NSString stringWithFormat:@"--%@--\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[request setHTTPBody:body];


NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
NSString *returnString = [[NSString alloc] initWithData:returnData encoding:NSUTF8StringEncoding];

NSLog(@"returnString=%@",returnString);

returnString包含:`HTTP Status 400 - Required MultipartFile parameter 'uploadFile' is not present

1 个答案:

答案 0 :(得分:1)

我选择了AFNetworking,这是多部分对象的一个​​很好的例子。

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
NSDictionary *parameters = @{@"foo": @"bar"};
NSURL *filePath = [NSURL fileURLWithPath:@"file://path/to/image.png"];

[manager POST:@"http://example.com/resources.json" parameters:parameters constructingBodyWithBlock:^(id<AFMultipartFormData> formData)
     {
      [formData appendPartWithFileURL:filePath name:@"image" error:nil];
     } success:^(AFHTTPRequestOperation *operation, id responseObject) {
      NSLog(@"Success: %@", responseObject);
     } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
     NSLog(@"Error: %@", error);
 }];