概述:
springmvc文件上传是将本地文件上传到tomcat服务器的某个文件夹下。Spring MVC 为文件上传提供了直接的支持,这种支持是通过即插即用的 MultipartResolver
流程:
1.首先需要新建web项目,导入所需要的依赖。
<!-- https://mvnrepository.com/artifact/org.springframework.session/spring-session -->
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session</artifactId>
<version>1.3.1.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload -->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.2</version>
</dependency>
2.然后需要配置配置文件上传解析器所在的springmvc.xml文件,需要配置文件上传所需要的MultipartResolver。
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="defaultEncoding" value="utf-8"></property>
<property name="maxUploadSize" value="10485760"></property>
</bean>
解析一下这几个参数:id这个参数必须配置,否则整条配置无法生效。id与class都是固定写死的。
<property>中的value的编码格式需要和上传表单所在的Jsp页面的编码格式保持一致。
<property>中的maxUploadSize是允许上传文件的最大值,单位是字节。
3.编写Jsp上传页面。
<form action="upload" method="post" enctype="multipart/form-data">
上传文件:<input type="file" name="uploadFile"/>
<br/>
文件描述:<input type="text" name="desc"/>
<br/>
<input type="submit" value="上传"/>
</form>
注释:form表单的enctype属性:规定了form表单数据在发送到服务器时候的编码方式。
multipart/form-data:指定传输数据为二进制数据,例如图片、mp3、文件等等。
4.编写控制器方法。
注释:需要在工程中新建所要上传的最终路径,即文中的image文件夹,获取真实路径之后会将所上传的文件保存到服务器端所对应的文件夹中。最终返回一个页面,页面为WEB-INF下面的success.jsp。
@RequestMapping("/upload")
public String testUploadFile(@RequestParam("desc") String desc,
@RequestParam("uploadFile") MultipartFile uploadFile,
HttpSession session) throws Exception {
//获取到上传文件的名字
String uploadFileName = uploadFile.getOriginalFilename();
//获取输入流
InputStream in = uploadFile.getInputStream();
//获取服务器端的uploads文件夹的真实路径。
ServletContext sc = session.getServletContext();
String realPath = sc.getRealPath("/image");
File targetFile = new File(realPath + "/" + uploadFileName);
FileOutputStream os = new FileOutputStream(targetFile);
//写文件
int i;
while ((i = in.read()) != -1) {
os.write(i);
}
in.close();
os.close();
return "success";
}
5.成功页面。
6.上传成功之后可以到Tomcat服务器端查看文件。
7.简化版的控制器方法:因为springmvc中自带一个方法:transferTo方法就可以完成上传文件工作。此方法内部其实就是封装了io流来实现的。这样写也可以实现相同的操作。
@RequestMapping("/upload")
public String testUploadFile1(@RequestParam("desc") String desc,
@RequestParam("uploadFile") MultipartFile uploadFile,
HttpSession session) throws Exception {
//获取到上传文件的名字
String uploadFileName = uploadFile.getOriginalFilename();
//获取服务器端的uploads文件夹的真实路径。
ServletContext sc = session.getServletContext();
String realPath = sc.getRealPath("/image");
File targetFile = new File(realPath + "/" + uploadFileName);
uploadFile.transferTo(targetFile);
return "success";
}