(由于字数限制请看项目里代码,下面省略部分不重要的代码)
首先是web.xml
01 | xmlversion="1.0"encoding="UTF-8"?> |
02 | <web-appversion="2.5" |
03 |
04 | xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |
05 | xsi:schemaLocation="http://java.sun.com/xml/ns/javaee |
06 |
07 | <servlet> |
08 | <servlet-name>uploadservlet-name> |
09 | <servlet-class>org.springframework.web.servlet.DispatcherServletservlet-class> |
10 | <load-on-startup>1load-on-startup> |
11 | servlet> |
12 | <servlet-mapping> |
13 | <servlet-name>uploadservlet-name> |
14 | <url-pattern>/url-pattern> |
15 | servlet-mapping> |
16 |
17 | <filter> |
18 | <filter-name>SpringCharacterEncodingFilterfilter-name> |
19 | <filter-class>org.springframework.web.filter.CharacterEncodingFilterfilter-class> |
20 | <init-param> |
21 | <param-name>encodingparam-name> |
22 | <param-value>UTF-8param-value> |
23 | init-param> |
24 | filter> |
25 | <filter-mapping> |
26 | <filter-name>SpringCharacterEncodingFilterfilter-name> |
27 | <url-pattern>/*url-pattern> |
28 | filter-mapping> |
29 |
30 | <welcome-file-list> |
31 | <welcome-file>/WEB-INF/jsp/user/add.jspwelcome-file> |
32 | welcome-file-list> |
33 | web-app> |
接下来是SpringMVC的配置文件upload-servlet.xml
01 | xmlversion="1.0"encoding="UTF-8"?> |
02 | <beansxmlns="http://www.springframework.org/schema/beans" |
03 | xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |
04 | xmlns:mvc="http://www.springframework.org/schema/mvc" |
05 | xmlns:context="http://www.springframework.org/schema/context" |
06 | xsi:schemaLocation="http://www.springframework.org/schema/beans |
07 | http://www.springframework.org/schema/beans/spring-beans-3.0.xsd |
08 |
09 | http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd |
10 |
11 | http://www.springframework.org/schema/context/spring-context-3.0.xsd"> |
12 | <context:component-scanbase-package="com.jadyer"/> |
13 |
14 | <beanclass="org.springframework.web.servlet.view.InternalResourceViewResolver"> |
15 | <propertyname="prefix"value="/WEB-INF/jsp/"/> |
16 | <propertyname="suffix"value=".jsp"/> |
17 | bean> |
18 |
19 |
20 | <beanid="multipartResolver"class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> |
21 | <propertyname="defaultEncoding"value="UTF-8"/> |
22 |
23 | <propertyname="maxUploadSize"value="200000"/> |
24 | bean> |
25 |
26 |
27 |
28 | <beanid="exceptionResolver"class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver"> |
29 | <propertyname="exceptionMappings"> |
30 | <props> |
31 |
32 | <propkey="org.springframework.web.multipart.MaxUploadSizeExceededException">error_fileuploadprop> |
33 | props> |
34 | property> |
35 | bean> |
36 | beans> |
下面是用于上传的表单页面//WEB-INF//jsp//user//add.jsp
1 | (由于字数限制请看项目里代码) |
下面是上传成功后打印用户信息的页面//WEB-INF//jsp//user//list.jsp
1 | (由于字数限制请看项目里代码) |
下面是上传文件内容过大时的提示页面//WEB-INF//jsp//error_fileupload.jsp
1 | (由于字数限制请看项目里代码) |
接下来是用到的实体类User.java
01 | publicclassUser { |
02 | privateString username; |
03 | privateString nickname; |
04 | privateString password; |
05 | privateString email; |
06 |
07 | //{此处get.set省略} |
08 | publicUser() { |
09 | } |
10 |
11 | publicUser(String username, String nickname, String password, String email) { |
12 | this.username = username; |
13 | this.nickname = nickname; |
14 | this.password = password; |
15 | this.email = email; |
16 | } |
17 | } |
最后是核心的UserController.java
01 | @Controller |
02 | @RequestMapping("/user") |
03 | publicclassUserController { |
04 | privatefinalstaticMap users = newHashMap(); |
05 |
06 | // 模拟数据源,构造初始数据 |
07 | publicUserController() { |
08 | users.put("张起灵", newUser("张起灵", "闷油瓶", "02200059", |
09 | "menyouping@yeah.net")); |
10 | users.put("李寻欢", newUser("李寻欢", "李探花", "08866659", |
11 | "lixunhuan@gulong.cn")); |
12 | users.put("拓拔野", newUser("拓拔野", "搜神记", "05577759", |
13 | "tuobaye@manhuang.cc")); |
14 | users.put("孙悟空", newUser("孙悟空", "美猴王", "03311159", |
15 | "sunhouzi@xiyouji.zh")); |
16 | } |
17 |
18 | @RequestMapping("/list") |
19 | publicString list(Model model) { |
20 | model.addAttribute("users", users); |
21 | return"user/list"; |
22 | } |
23 |
24 | @RequestMapping(value = "/add", method = RequestMethod.GET) |
25 | publicString addUser() { |
26 | return"user/add"; |
27 | } |
28 |
29 | @RequestMapping(value = "/add", method = RequestMethod.POST) |
30 | publicString addUser(User user, @RequestParamMultipartFile[] myfiles, |
31 | HttpServletRequest request) throwsIOException { |
32 | // 如果只是上传一个文件,则只需要MultipartFile类型接收文件即可,而且无需显式指定@RequestParam注解 |
33 | // 如果想上传多个文件,那么这里就要用MultipartFile[]类型来接收文件,并且还要指定@RequestParam注解 |
34 | // 并且上传多个文件时,前台表单中的所有 |
35 | // type="file"/>的name都应该是myfiles,否则参数里的myfiles无法获取到所有上传的文件 |
36 | for(MultipartFile myfile : myfiles) { |
37 | // if (myfile.isEmpty()) { |
38 | // System.out.println("文件未上传"); |
39 | // } else { |
40 | System.out.println("文件长度: "+ myfile.getSize()); |
41 | System.out.println("文件类型: "+ myfile.getContentType()); |
42 | System.out.println("文件名称: "+ myfile.getName()); |
43 | System.out.println("文件原名: "+ myfile.getOriginalFilename()); |
44 | System.out.println("========================================"); |
45 | // 如果用的是Tomcat服务器,则文件会上传到\\%TOMCAT_HOME%\\webapps\\YourWebProject\\WEB-INF\\upload\\文件夹中 |
46 | // 这里不必处理IO流关闭的问题,因为FileUtils.copyInputStreamToFile()方法内部会自动把用到的IO流关掉,我是看它的源码才知道的 |
47 | // String realPath = |
48 | // request.getSession().getServletContext().getRealPath("/FileTest/WebContent/WEB-INF/upload"); |
49 | String realPath = request.getSession().getServletContext() |
50 | .getRealPath("/WEB-INF/upload"); |
51 | System.out.println(realPath); |
52 |
53 | FileUtils.copyInputStreamToFile(myfile.getInputStream(), newFile( |
54 | realPath, myfile.getOriginalFilename())); |
55 | // } |
56 | } |
57 | users.put(user.getUsername(), user); |
58 | return"redirect:/user/list"; |
59 | } |
60 | } |
补充:记得建立这个目录,用于存放上传的文件,即//WEB-INF//upload//
下面是程序运行截图:
添加成功后: