Java 使用Angularjs将文件上载到SpringMVC时出现错误状态415 如何使用Angularjs上传文件和表单数据?
我正在开发一个内置于AngularJs中的UI。它有一个表单,用户可以在其中输入他们的详细信息,如Id、姓名、地址、PIN等。此外,我还必须提供一个功能,用户可以在表单数据中上载多个文件 我已经阅读了AngularJs中的文件上传教程,并创建了一个文件上传指令 JavaScript中的代码如下所示Java 使用Angularjs将文件上载到SpringMVC时出现错误状态415 如何使用Angularjs上传文件和表单数据?,java,angularjs,spring,spring-mvc,angularjs-http,Java,Angularjs,Spring,Spring Mvc,Angularjs Http,我正在开发一个内置于AngularJs中的UI。它有一个表单,用户可以在其中输入他们的详细信息,如Id、姓名、地址、PIN等。此外,我还必须提供一个功能,用户可以在表单数据中上载多个文件 我已经阅读了AngularJs中的文件上传教程,并创建了一个文件上传指令 JavaScript中的代码如下所示 var formData = new FormData(); formData.append('id', $scope.id); formData.append('name', $scope.na
var formData = new FormData();
formData.append('id', $scope.id);
formData.append('name', $scope.name);
formData.append('addressLine1', $scope.addressLine1);
formData.append('addressLine2', $scope.addressLine2);
formData.append('road', $scope.road);
formData.append('city', $scope.city);
formData.append('pin', $scope.pin);
formData.append('state', $scope.state);
formData.append('country', $scope.country);
formData.append('file', $scope.file);
$http({
method: 'POST',
url: baseURL + "item/" + $scope.id,
data: formData,
responseType: 'arraybuffer',
transformRequest: angular.identity,
headers: {'Content-Type': undefined},
});
在Spring MVC中,控制器看起来像
@RequestMapping(value = "item/{id}", method = RequestMethod.POST,
consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public @ResponseBody ResponseResource addData(@PathVariable String id,
@RequestParam DataRequestResource dataRequestResource,
@RequestParam(value = "file") MultipartFile file){
DataRequestResource包含
public class DataRequestResource {
private String id;
private String name;
private String addressLine1;
private String addressLine2;
private Long road;
private String city;
private String pin;
private String state;
private String country;
}
当我尝试执行此操作时,我得到
415 (Unsupported Media Type)
我可以为每个变量使用@RequestParam
来实现这一点。但是有没有一种方法可以在单独的参数中获取资源对象和文件中的表单数据?var Data=new FormData();
var data = new FormData();
for (var i = 0; i < files.length; i++) {
data.append("Photo",files[i]);
}
data.append('description',description);
$http.post('/api/timeline/submit_post',data,{
transformRequest: angular.identity,
headers: {'Content-Type': undefined}
}).then(function(response){
var res = response.data;
if(res.status == "Success"){
$scope.$emit('hide_loader');
$scope.$parent.posts = [];
$scope.$parent.time = Date.now()/1000;
$scope.$parent.getAllPostOfTimeline();
toaster.pop('success', 'Post uploaded successfully.');
$scope.description = '';
$scope.modal.close();
}else{
$scope.$emit('hide_loader');
toaster.pop("error",res.msg);
}
},function(err){
$scope.$emit('hide_loader');
toaster.pop("error","Server");
});
对于(var i=0;i
如果$scope.file
是来自的,则AngularJS代码的可能副本是正确的。开发人员控制台的“网络”选项卡为有效负载显示了什么?注意:如果$scope.file
是一个,则仅将$scope.file[0]
附加到。此答案可能会有所帮助