springmvc默认的解析器里面是没有加入对文件上传的解析的,,使用springmvc对文件上传的解析器来处理文件上传的时需要用springmvc提供的multipartresolver的申明,又因为commonsmultipartresolver实现了multipartresolver接口,所以我们可以在springmvc配置文件中这样配置:
1
2
3
4
5
6
|
<bean id= "multipartresolver"
class = "org.springframework.web.multipart.commons.commonsmultipartresolver" >
<property name= "defaultencoding" value= "utf-8" />
<property name= "maxuploadsize" value= "10485760000" />
<property name= "maxinmemorysize" value= "40960" />
</bean>
|
首先引入文件上传所需要的包,commons-logging-*.jar commons-io-*.jar commons-fileupload-*.jar
新建一个jsp页面.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
<%@ page language= "java" contenttype= "text/html; charset=utf-8"
pageencoding= "utf-8" %>
<!doctype html public "-//w3c//dtd html 4.01 transitional//en" "http://www.w3.org/tr/html4/loose.dtd" >
<html>
<head>
<meta http-equiv= "content-type" content= "text/html; charset=utf-8" >
<title>文件上传</title>
</head>
<body>
<%--<form action= "user/fileupload" method= "post" enctype= "multipart/form-data" >--%>
<form action= "user/fileupload" method= "post" enctype= "multipart/form-data" >
<input type= "file" name= "fileupload" />
<input type= "submit" value= "上传" />
</form>
</body>
</html>
|
springmvc上传文件的形式有很多,这里我介绍两种.
第一种,看controller
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
|
package gd.hz.springmvc.controller;
import java.io.file;
import java.io.ioexception;
import org.springframework.stereotype.controller;
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.commons.commonsmultipartfile;
import org.springframework.web.servlet.modelandview;
@controller ( "usercontroller" )
@requestmapping ( "user" )
public class usercontroller {
// 处理文件上传一
@requestmapping (value = "fileupload" , method = requestmethod.post)
public modelandview fileupload(
@requestparam ( "fileupload" ) commonsmultipartfile file) {
// 获取文件类型
system.out.println(file.getcontenttype());
// 获取文件大小
system.out.println(file.getsize());
// 获取文件名称
system.out.println(file.getoriginalfilename());
// 判断文件是否存在
if (!file.isempty()) {
string path = "d:/" + file.getoriginalfilename();
file localfile = new file(path);
try {
file.transferto(localfile);
} catch (illegalstateexception e) {
e.printstacktrace();
} catch (ioexception e) {
e.printstacktrace();
}
}
return new modelandview( "datasuccess" );
}
}
|
类commonsmultipartfile为我们提供了许多对文件处理的方法.例如文件大小,上传文件名称,文件类型,具体用法可以查看spring的文档.transferto就是将文件输出到指定地方.
文件上传的第二种方法,这种方法比较常用:
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
|
package gd.hz.springmvc.controller;
import java.io.file;
import java.io.ioexception;
import java.util.iterator;
import javax.servlet.http.httpservletrequest;
import org.springframework.stereotype.controller;
import org.springframework.web.bind.annotation.requestmapping;
import org.springframework.web.bind.annotation.requestmethod;
import org.springframework.web.multipart.multipartfile;
import org.springframework.web.multipart.multiparthttpservletrequest;
import org.springframework.web.multipart.commons.commonsmultipartresolver;
@controller ( "usercontroller" )
@requestmapping ( "user" )
public class usercontroller {
// 处理文件上传二
@requestmapping (value = "fileupload2" , method = requestmethod.post)
public string fileupload2(httpservletrequest request)
throws illegalstateexception, ioexception {
// 设置上下方文
commonsmultipartresolver multipartresolver = new commonsmultipartresolver(
request.getsession().getservletcontext());
// 检查form是否有enctype="multipart/form-data"
if (multipartresolver.ismultipart(request)) {
multiparthttpservletrequest multirequest = (multiparthttpservletrequest) request;
iterator<string> iter = multirequest.getfilenames();
while (iter.hasnext()) {
// 由commonsmultipartfile继承而来,拥有上面的方法.
multipartfile file = multirequest.getfile(iter.next());
if (file != null ) {
string filename = "demoupload" + file.getoriginalfilename();
string path = "d:/" + filename;
file localfile = new file(path);
file.transferto(localfile);
}
}
}
return "datasuccess" ;
}
}
|
multiparthttpservletrequest提供了更加灵活的方法,可以获取多个文件和文件名,可以遍历获得每个文件.
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:http://mylfd.iteye.com/blog/1893648