spring mvc的多文件上传实现
方法一、在形参里定义MultipartFile数组
controller层
@RequestMapping("upload")
public String uploadTest(MultipartFile[] file){
//遍历文件
for (MultipartFile multipartFile : file) {
System.out.println(multipartFile.getOriginalFilename());
//保存文件名
String path = multipartFile.getOriginalFilename();
//保存文件
multipartFile.transferTo(new File("E:/upload"+path));
}
return "success";
}
jsp页面
<form action="upload" enctype="multipart/form-data" method="post">
<input type="file" name="file" >
<input type="file" name="file" >
<input type="file" name="file" >
<input type="file" name="file" >
<input type="submit" value="upload">
</form>
结果展示
总结:这种方法适用于多个表单的name属性一致,然后和形参的属性值绑定。但是在实际操作中总有不同name的表单,那该怎么办呢?那就看方法二
方法二、利用spring自带的文件上传方法
controller层
public String upload(HttpServletRequest request){
//将当前上下文初始化给 CommonsMutipartResolver (多部分解析器)
CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(request.getSession().getServletContext());
//判断form是否有enctype="multipart/form-data"
if (multipartResolver.isMultipart(request)) {
//将request转换成MultipartHttpServletRequest类型
MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest)request;
Iterator<String> iter = multipartRequest.getFileNames();
//遍历文件
while (iter.hasNext()) {
MultipartFile file = multipartRequest.getFile(iter.next());
if(!file.isEmpty()){
//文件名
String path = file.getOriginalFilename();
//保存上传文件
try {
file.transferTo(new File(new File("E:/upload"+path));
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
总结:该方法先判断form是否存在enctype="multipart/form-data,然后将request强转成MultipartHttpServletRequest的request,从而在请求中遍历所有的文件,此时就不需要文件的name属性来唯一绑定了。(推荐使用,方法比较多)