1.文件上传方式的回顾
1.1 导入文件上传的jar包:
<!-- 导入文件上传所需要的jar包-->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.5</version>
</dependency>
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.2.2</version>
</dependency>
1.2 上传方法
/**
* 文件上传
* @return
*/
@RequestMapping(value = "/tranditional",method = RequestMethod.POST)
public String fileUpload_tranditional(HttpServletRequest request) throws Exception {
System.out.println("fileUpload_tranditional");
/**
* 只有转发和POST才可以直接访问类路径下文件夹里的页面,
* 浏览器直接发GET请求只能访问类路径下的文件
*/
//使用fileload组件完成文件上传
//1.设置上传位置
String path = request.getSession().getServletContext().getRealPath("/uploads/");
System.out.println(path);
//2.判断该路径时候存在
File file = new File(path);
if(!file.exists()){
//2.1 不存在则创建该文件夹
System.out.println("文件夹不存在,创建!");
file.mkdirs();
}
//3.解析request对象,获取上传文件项
DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(diskFileItemFactory);
//3.1 解析request
List<FileItem> fileItemList = upload.parseRequest(request);
//3.2 遍历
for(FileItem fileItem:fileItemList){
//判断当前是否是上传文件项
if(fileItem.isFormField()){
//普通表单项
}else {
//上传文件项,获取文件项名字
String filename = fileItem.getName();
System.out.println(filename);
//完成文件上传
fileItem.write(new File(path,filename));
//删除临时文件
fileItem.delete();
}
}
return "success";
}
3.SpringMVC上传文件方法
在前端控制器调用文件解析器来解析request,所以我们需要配置一个文件解析器。并在Controller类中写入spring提供的文件上传对象MultipartFile,并由它来实现功能。
/**
* SpringMVC方法上传
* 注意MultipartFile对象的命名必须和input(file)的name是一致的,否则无法解析
* @param upload
* @return
*/
@RequestMapping(value = "/springMVC")
public String fileUpload_SpringMVC(HttpServletRequest request, MultipartFile upload) throws IOException {
System.out.println("SpringMVC文件上传");
//1.配置文件解析器
//1.设置上传位置
String path = request.getSession().getServletContext().getRealPath("/uploads/");
System.out.println(path);
//2.判断该路径时候存在
File file = new File(path);
if(!file.exists()){
//2.1 不存在则创建该文件夹
System.out.println("文件夹不存在,创建!");
file.mkdirs();
}
//3.获取文件名
String filename = upload.getOriginalFilename();
//4.完成文件上传
upload.transferTo(new File(path,filename));
return "success";
}
<!-- 配置文件解析-->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="10485760"/>
</bean>
其中配置的时候要注意以下几点:
1.前端控制器传来的MultipartFile的变量名,必须和对应的上传组件input的name属性名一致才可以解析文件,否则无法使用。
2.在springmvc.xml配置文件解析器的时候,id必须固定为multipartResolver,这是固定写法,不能更改。