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

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

下面是程序运行截图:

 

添加成功后:

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值