如何上传单个文件和上传多个文件。
一、上传单个文件
步骤如下:
1、在前端控制器配置文件(本项目所取的名字是:spring-mvc-servlet.xml)中加入上传文件所需的Bean。
-
-
- <bean id="multipartResolver"
- class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
- <property name="maxUploadSize" value="209715200" />
- <property name="defaultEncoding" value="UTF-8" />
- <property name="resolveLazily" value="true" />
- </bean>
2、在pom.xml中注入上传文件所需的依赖
-
- <dependency>
- <groupId>commons-fileupload</groupId>
- <artifactId>commons-fileupload</artifactId>
- <version>1.3.1</version>
- </dependency>
- <dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>
3、在项目views文件夹(项目中装页面的文件夹)下新建一个上传单个文件的页面
@uploadFile.jsp
- <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
-
- <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
- <html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
- <title>上传单个文件示例</title>
-
- <link rel="stylesheet" href="<%=request.getContextPath()%>/resources/css/main.css" type="text/css" />
- </head>
- <body>
- <div align="center">
-
- <h1>上传附件</h1>
- <form method="post" action="/HelloSpringMVC/hello/doUpload" enctype="multipart/form-data">
- <input type="file" name="file"/>
- <button type="submit" >提交</button>
- </form>
- </div>
- </body>
- </html>
注:
(1)form表单提交的类型一定要加上enctype="multipart/form-data",表示不对所提交的内容编码。
(2)action="" 路径中前面要加项目名,这里项目名是HelloSpringMVC。
(3)doUpload是本表单所提交的对应的处理方法。名为doUpload。
(4)input节点的name="file"中的file与doUpload方法所接收的参数名称一致。
4、定义访问成功的页面
@success.jsp
- <%@ page language="java" contentType="text/html; charset=UTF-8"
- pageEncoding="UTF-8"%>
- <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
- <html>
- <head>
- <link rel="stylesheet" href="<%=request.getContextPath()%>/resources/css/main.css" type="text/css" />
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
- <title>上传文件成功页面</title>
- </head>
- <body>
- <div align="center">
- <h1>Success</h1>
- </div>
- </body>
- </html>
5、在Controller类中加入访问入口方法(就是定位到上传单个文件的页面)
- //定位到上传单个文件界面 /hello/upload
- @RequestMapping(value="/upload", method=RequestMethod.GET)
- public String showUploadPage(){
- return "uploadFile"; //view文件夹下的上传单个文件的页面
- }
6、在Controller类中定义上传文件的响应方法(就是表单中的所提交的action中的方法名)
-
-
-
-
-
- @RequestMapping(value="/doUpload", method=RequestMethod.POST)
- public String doUploadFile(@RequestParam("file") MultipartFile file){
-
- if(!file.isEmpty()){
- try {
-
-
- FileUtils.copyInputStreamToFile(file.getInputStream(), new File("d:\\temp\\file\\",
- System.currentTimeMillis()+ file.getOriginalFilename()));
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
-
- return "success";
- }
7、运行验证:
二、上传多个文件
步骤如下:
1、2、4步骤同上传单个文件一样,无需重复。
3、在项目views文件夹(项目中装页面的文件夹)下新建一个上传多个文件的页面
@uploadMultifile.jsp
- <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
-
- <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
- <html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
- <title>上传多个文件示例</title>
-
- <link rel="stylesheet" href="<%=request.getContextPath()%>/resources/css/main.css" type="text/css" />
- </head>
- <body>
- <div align="center">
- <h1>上传多个附件</h1>
- <form method="post" action="/HelloSpringMVC/hello/doMultiUpload" enctype="multipart/form-data">
- <input type="file" name="file1"/>
- <br/>
- <input type="file" name="file2"/>
- <button type="submit" >提交</button>
- </form>
-
- </div>
- </body>
- </html>
注:
(1)form表单提交的类型一定要加上enctype="multipart/form-data",表示不对所提交的内容编码。
(2)action="" 路径中前面要加项目名,这里项目名是HelloSpringMVC。
(3)doMultiUpload是本表单所提交的对应的处理方法。名为doMultiUpload。
(4)要传几个文件就加入几个 <input type="file" name="file2"/> 不过name的值要不同
5、在Controller类中加入访问入口方法(就是定位到上传多个文件的页面)
-
- @RequestMapping(value="/uploadMulti", method=RequestMethod.GET)
- public String showUploadPage2(){
- return "uploadMultifile";
- }
6、在Controller类中定义上传文件的响应方法(就是表单中的所提交的action中的方法名)
-
-
-
-
-
-
- @RequestMapping(value="/doMultiUpload", method=RequestMethod.POST)
- public String doUploadFile2(MultipartHttpServletRequest multiRequest) throws IOException{
-
- Iterator<String> filesNames = multiRequest.getFileNames();
- while(filesNames.hasNext()){
- String fileName =filesNames.next();
- MultipartFile file = multiRequest.getFile(fileName);
- if(!file.isEmpty()){
- log.debug("Process file: {}", file.getOriginalFilename());
- FileUtils.copyInputStreamToFile(file.getInputStream(), new File("d:\\temp\\imooc\\",
- System.currentTimeMillis()+ file.getOriginalFilename()));
- }
-
- }
-
- return "success";
- }
注:
1、这里与上传单个文件处理方法不同的是接收参数由MultipartFile类型变为了MultipartHttpServletRequest。
2、MultipartFile由MultipartHttpServletRequest对象的getFile(fileName)方法获得。
7、运行验证
至此,则完成了利用Spring MVC实现文件上传的功能。