(由於字數限制請看項目裏代碼,下面省略部分不重要的代碼)
首先是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 |
"[email protected]")); |
10 |
users.put("李尋歡", newUser("李尋歡", "李探花", "08866659", |
11 |
"[email protected]")); |
12 |
users.put("拓拔野", newUser("拓拔野", "搜神記", "05577759", |
13 |
"[email protected]")); |
14 |
users.put("孫悟空", newUser("孫悟空", "美猴王", "03311159", |
15 |
"[email protected]")); |
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//
下面是程序運行截圖:
添加成功後: