使用ajax和spring mvc上传多个文件

我正在尝试使用FormData和spring上载multile文件。

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
});

Spring控制器代码:

@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,错误请求。

如何使弹簧控制器与多个文件一起工作? 我无法找到其他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循环之后),因为它正在设置一个具有相同名称的参数,并且会出现某种类型的毛刺。

希望这可以帮助。

链接地址: http://www.djcxy.com/p/87335.html

上一篇: Upload multiple files using ajax and spring mvc

下一篇: C#'s readonly vs C++'s const