一、准备
需要的jar
二、配置
1、 spmvc-servlet.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
<?xml version=
"1.0"
encoding=
"UTF-8"
?>
<beans xmlns=
"http://www.springframework.org/schema/beans"
xmlns:xsi=
"http://www.w3.org/2001/XMLSchema-instance"
xmlns:context=
"http://www.springframework.org/schema/context"
xmlns:mvc=
"http://www.springframework.org/schema/mvc"
xmlns:util=
"http://www.springframework.org/schema/util"
xsi:schemaLocation="
http:
//www.springframework.org/schema/beans
http:
//www.springframework.org/schema/beans/spring-beans-3.0.xsd
http:
//www.springframework.org/schema/context
http:
//www.springframework.org/schema/context/spring-context-3.0.xsd
http:
//www.springframework.org/schema/mvc
http:
//www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
http:
//www.springframework.org/schema/util
http:
//www.springframework.org/schema/util/spring-util-3.0.xsd">
<!-- 默认的注解映射的支持 ,它会自动注册DefaultAnnotationHandlerMapping 与AnnotationMethodHandlerAdapter-->
<mvc:annotation-driven />
<!-- 自动扫描注解的Controller -->
<context:component-scan base-
package
=
"com.wy.controller"
/>
<bean
class
=
"org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"
/>
<!-- 映射处理器 -->
<bean id=
"simpleUrlMapping"
class
=
"org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"
>
<property name=
"mappings"
>
<props>
<prop key=
"/fileUploadController.do"
>fileUploadController</prop>
</props>
</property>
</bean>
<!-- ParameterMethodNameResolver 解析请求参数,并将它匹配Controller中的方法名 -->
<bean id=
"parameterMethodNameResolver"
class
=
"org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver"
>
<property name=
"paramName"
value=
"action"
/>
</bean>
<bean id=
"fileUploadController"
class
=
"com.wy.controller.FileUploadController"
>
<property name=
"methodNameResolver"
ref=
"parameterMethodNameResolver"
>
</property>
</bean>
<!-- 文件上传表单的视图解析器 -->
<bean id=
"multipartResolver"
class
=
"org.springframework.web.multipart.commons.CommonsMultipartResolver"
>
<!-- one of the properties available; the maximum file size in bytes -->
<property name=
"maxUploadSize"
value=
"204800"
/>
</bean>
</beans>
|
2、Controller
使用两种方式:
一种是基于注解的,另一种传统的方式HttpServletRequest
使用第二种方式时要注意:操作方法中对应的方法参数前两位必须是request,response对象并且都要加上,否则会出现 No request handling method with name 'insert' in class "ClassName",页面显示为404错误
这个问题出现在使用多操作控制器情况下,相关的操作方法中对应的方法参数前两位必须是request,response对象,必须要有,否则会报如上异常。
package
com.wy.controller;
import
java.util.List;
import
javax.servlet.http.HttpServletRequest;
import
javax.servlet.http.HttpServletResponse;
import
javax.servlet.http.HttpSession;
import
org.springframework.stereotype.Controller;
import
org.springframework.util.MultiValueMap;
import
org.springframework.web.bind.annotation.RequestMapping;
import
org.springframework.web.bind.annotation.RequestMethod;
import
org.springframework.web.bind.annotation.RequestParam;
import
org.springframework.web.multipart.MultipartFile;
import
org.springframework.web.multipart.MultipartHttpServletRequest;
import
org.springframework.web.servlet.ModelAndView;
import
org.springframework.web.servlet.mvc.multiaction.MultiActionController;
@Controller
@RequestMapping
(
"/fileUploadController"
)
public
class
FileUploadController
extends
MultiActionController {
/**
* 1、文件上传
* @param request
* @param response
* @return
*/
public
ModelAndView uploadFiles(HttpServletRequest request, HttpServletResponse response) {
ModelAndView mav =
new
ModelAndView();
// 转型为MultipartHttpRequest
MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
// 获得上传的文件(根据前台的name名称得到上传的文件)
MultiValueMap<String, MultipartFile> multiValueMap = multipartRequest.getMultiFileMap();
List<MultipartFile> file = multiValueMap.get(
"clientFile"
);
//MultipartFile file = multipartRequest.getFile("clientFile");
if
(!file.isEmpty()){
//在这里就可以对file进行处理了,可以根据自己的需求把它存到数据库或者服务器的某个文件夹
System.out.println(
"================="
+file.get(
0
).getName() + file.get(
0
).getSize());
}
return
mav;
}
/**
*
* @param name
* @param file
* @param session
* @return
*/
@RequestMapping
(value=
"/uploadFile"
, method=RequestMethod.POST)
public
String uploadFile(
@RequestParam
(
"fileName"
) String fileName,
@RequestParam
(
"clientFile"
) MultipartFile clientFile, HttpSession session){
if
(!clientFile.isEmpty()) {
//在这里就可以对file进行处理了,可以根据自己的需求把它存到数据库或者服务器的某个文件夹
System.out.println(
"================="
+clientFile.getSize());
}
return
""
;
}
}
对文件的具体实现
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
|
import
java.io.File;
import
java.io.IOException;
import
java.util.Iterator;
import
java.util.UUID;
import
javax.servlet.http.HttpServletRequest;
import
javax.servlet.http.HttpServletResponse;
import
org.springframework.web.multipart.MultipartFile;
import
org.springframework.web.multipart.MultipartHttpServletRequest;
import
org.springframework.web.multipart.commons.CommonsMultipartResolver;
public
class
AddImage {
public
String upload2(HttpServletRequest request,HttpServletResponse response, String fileName)
throws
IllegalStateException, IOException {
//创建一个通用的多部分解析器
CommonsMultipartResolver multipartResolver =
new
CommonsMultipartResolver(request.getSession().getServletContext());
//判断 request 是否有文件上传,即多部分请求
if
(multipartResolver.isMultipart(request)){
//转换成多部分request
MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest)request;
//取得request中的所有文件名
Iterator<String> iter = multiRequest.getFileNames();
while
(iter.hasNext()){
//记录上传过程起始时的时间,用来计算上传时间
int
pre = (
int
) System.currentTimeMillis();
//取得上传文件
MultipartFile file = multiRequest.getFile(iter.next());
if
(file !=
null
){
//取得当前上传文件的文件名称
String myFileName = file.getOriginalFilename();
//如果名称不为“”,说明该文件存在,否则说明该文件不存在
if
(myFileName.trim() !=
""
){
System.out.println(myFileName);
//重命名上传后的文件名
fileName = UUID.randomUUID() +
"+"
+ file.getOriginalFilename();
//定义上传路径
String path =
"F:/workspace/myproject/WebRoot/image/"
+ fileName;
File localFile =
new
File(path);
file.transferTo(localFile);
}
}
//记录上传该文件后的时间
int
finaltime = (
int
) System.currentTimeMillis();
System.out.println(finaltime - pre);
}
}
return
fileName ;
}
}
|
3、视图
upload.jsp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
<%@ page language=
"java"
import
=
"java.util.*"
pageEncoding=
"UTF-8"
%>
<%
String path = request.getContextPath();
String basePath = request.getScheme() +
"://"
+ request.getServerName() +
":"
+ request.getServerPort()
+ path +
"/"
;
%>
<!DOCTYPE HTML PUBLIC
"-//W3C//DTD HTML 4.01 Transitional//EN"
>
<html>
<head>
<title>file upload test</title>
</head>
<body>
<form method=
"post"
action=
"<%=path %>/fileUploadController/uploadFile"
enctype=
"multipart/form-data"
>
文件名: <input type=
"text"
name=
"fileName"
/><br/>
<input type=
"file"
name=
"clientFile"
/><br/>
<input type=
"submit"
value=
"上传文件 "
/>
</form>
</body>
</html>
|