[英]Upload multiple files using ajax and spring mvc
我正在尝试使用FormData和spring上传多文件。
HTML:
<input type="file" name="img" multiple id="upload-files">
JS代码:
var ajaxData = new FormData();
var files = $('#upload-files').prop('files');
for(var i=0;i<files.length;i++){
ajaxData.append('file['+i+']', files[i]);
}
ajaxData.append("file", files);
$http.post('../rest/upload', ajaxData, {
headers: {'Content-Type': undefined },
transformRequest: angular.identity
});
弹簧控制器代码:
@RequestMapping(value = "/upload", produces="application/json", method = RequestMethod.POST)
@ResponseBody
public String upload(
@RequestParam ArrayList<MultipartFile> files
){
System.out.println(files.size());
return null;
}
但是,在提交包含多个文件的请求时,文件数为0。 使用数组表示法MultipartFile[] files
而不是ArrayList时,它给出了400错误请求。
如何使Spring Controller处理多个文件? 我找不到其他SO问题的解决方案。
默认情况下, DataBinder
尝试使用约定将请求参数绑定到目标对象-请求中的参数名称(在您的情况下为FormData)与控制器操作中的参数名称必须匹配。
在您的情况下,您应该将file[i]
重命名为files[i]
:
for(var i=0; i < files.length; i++){
ajaxData.append('files[' + i + ']', files[i]);
}
或将操作的参数从ArrayList<MultipartFile> files
重命名为ArrayList<MultipartFile> file
另外,删除此行ajaxData.append("file", files);
(就在for循环之后),因为它正在使用相同的名称设置参数,并且可能会发生某种故障。
希望这可以帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.