Spring MVC實現的帶參數的form表單多文件上傳-

(由於字數限制請看項目裏代碼,下面省略部分不重要的代碼)

首先是web.xml

01

xmlversion="1.0"encoding="UTF-8"?>  

02

<web-appversion="2.5"

03

xmlns="http://java.sun.com/xml/ns/javaee"

04

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

05

xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 

06

http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">  

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

http://www.springframework.org/schema/mvc

09

http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd

10

http://www.springframework.org/schema/context 

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//

下面是程序運行截圖:

 

添加成功後:

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章