springMVC文件上传的条件:
① 表单提交的方式是post;
② 表单中上传项必须有一个name属性;
③ 表单的enctype属性值是multipart/form-data
所需jar包:
commons-fileupload-1.2.1.jar
commons-io-2.0.1.jar
commons-logging.jar
spring-beans-3.2.8.RELEASE.jar
spring-context-3.2.8.RELEASE.jar
spring-core-3.2.8.RELEASE.jar
spring-expression-3.2.8.RELEASE.jar
spring-web-3.2.8.RELEASE.jar
spring-webmvc-3.2.8.RELEASE.jar
jstl.jar
standard.jar
所需js包:jquery.min.js(测试用的是jQuery v2.1.4版本)
以下测试图片上传示例:
文件上传页面demo.jsp:
<%@ 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>springMVC文件上传</title>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript">
var i = 1;
$(function(){
$("#btn_add").click(function(){
$('#newUpload').append('<div id="div_'+i
+'"><input name="file" type="file"/><input type="button" value="删除" οnclick="del('+i+')"/></div>');
i += 1;
})
})
function del(index){
$('#div_' + index).remove();
}
</script>
</head>
<body>
<h2>单文件上传</h2>
<form action="file/upload.do" enctype="multipart/form-data" method="post">
<input type="file" name="file">
<input type="submit" value="上传" >
</form>
<br>
<hr align="left" width="35%" color="#FF0000" size="3">
<br>
<h2>多文件上传</h2>
<form action="file/upload2.do" enctype="multipart/form-data" method="post">
<div id="newUpload">
<input type="file" name="file"><input type="button" id="btn_add" value="增加1行" ><br>
</div>
<br>
<input type="submit" value="上传" >
</form>
</body>
</html>
上传成功返回页面success.jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!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>success</title>
</head>
<body>
<h1><font color="green">上传成功!!!</font></h1><br/>
单图片显示: <br/><img src="${img}">
<hr align="left" width="70%" color="#FF0000" size="3">
多图片显示: <br/>
<c:forEach items="${list}" var="img" varStatus="s">
图片${s.count}:<img src="${img}">
</c:forEach>
</body>
</html>
上传失败返回页面fail.jsp:
<%@ 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>fail</title>
</head>
<body>
<h1><font color="red">上传失败!!!</font></h1><br/>
<div><h3>消息提示:${message}</h3></div>
</body>
</html>
后台处理:
@Controller
@RequestMapping("/file")
public class UploadController {
/**
* 单文件上传
*/
@RequestMapping("/upload.do")
public String upload(@RequestParam("file") CommonsMultipartFile file,HttpServletRequest request) {
String message = ""; //定义消息提示
if(!file.isEmpty()){
try {
//获取文件名
String fileName = file.getOriginalFilename();
//校验上传文件类型
Pattern pat = Pattern.compile("[.]jpg|png|jpeg|gif$");
Matcher matcher = pat.matcher(fileName);
if(!matcher.find()) {
message = "请上传图片类型文件";
request.getSession().setAttribute("message", message);
return "fail";
}
//校验上传文件大小
if (file.getSize() > 1024 * 1024 * 2) {
message = "文件大小不能超过2M";
request.getSession().setAttribute("message", message);
return "fail";
}
//新文件名
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
String newFileName = sdf.format(new Date()) + UUID.randomUUID().toString().replace("-", "") +
fileName.substring(fileName.indexOf("."));
//文件保存路径
String path = request.getSession().getServletContext().getRealPath("/upload/" + newFileName);
//创建文件
File diskFile = new File(path);
if (!diskFile.exists()) {
diskFile.mkdir();
}
//文件上传
FileUtils.copyInputStreamToFile(file.getInputStream(), diskFile);
//测试图片显示路径
String img = "http://localhost:80/springmvcupload/upload/" + newFileName;
//返回页面数据
request.getSession().setAttribute("img", img);
} catch (Exception e) {
e.printStackTrace();
}
}
return "success";
}
/**
* 多文件上传
*/
@RequestMapping("/upload2.do")
public String upload2(@RequestParam("file") CommonsMultipartFile[] files,HttpServletRequest request) {
String message = ""; //定义消息提示
List<String> list = new ArrayList<String>(); //存放图片数组
if(files != null){
for (int i = 0; i < files.length; i++) {
//获取文件名
String fileName = files[i].getOriginalFilename();
//校验上传文件类型
Pattern pat = Pattern.compile("[.]jpg|png|jpeg|gif$");
Matcher matcher = pat.matcher(fileName);
if(!matcher.find()) {
message = "请上传图片类型文件";
request.getSession().setAttribute("message", message);
return "fail";
}
//校验上传文件大小
if (files[i].getSize() > 1024 * 1024 * 2) {
message = "文件大小不能超过2M";
request.getSession().setAttribute("message", message);
return "fail";
}
//新文件名
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
String newFileName = sdf.format(new Date()) + UUID.randomUUID().toString().replace("-", "") +
fileName.substring(fileName.indexOf("."));
//文件保存路径
String path = request.getSession().getServletContext().getRealPath("/upload/" + newFileName);
//创建文件
File diskFile = new File(path);
if (!diskFile.exists()) {
diskFile.mkdirs();
}
try {
//文件上传
files[i].transferTo(diskFile);
//测试图片显示路径
String img = "http://localhost:80/springmvcupload/upload/" + newFileName;
list.add(img);
} catch (Exception e) {
e.printStackTrace();
}
}
//返回页面数据
request.getSession().setAttribute("list", list);
}
return "success";
}
}
<!-- 开启组件扫描 -->
<context:component-scan base-package="test"/>
<!-- 开启handlermapping -->
<mvc:annotation-driven/>
<!-- springMVC的视图解析器 -->
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
<!-- 文件上传解析器: id必须为multipartResolver,maxUploadSize以字节为单位:10485760 = 10M -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="defaultEncoding" value="UTF-8" />
<property name="maxUploadSize" value="10485760"/>
</bean>
web.xml文件:
<servlet>
<servlet-name>spring</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>spring</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
文件上传页面demo.jsp
单文件上传成功页面success.jsp
多文件上传成功页面success.jsp
文件上传失败页面fail.jsp