SpringMVC框架之文件上传

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";  
    }  
}

applicationContext.xml文件:
 
 <!-- 开启组件扫描 -->
    <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




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值