struts2附件上传,大小超过最大值处理

Action:

/**  
	    * 当上传文件大小大于struts.multipart.maxSize提示时,  
	    * 客户端会出现如下错误:  
	    * "the request was rejected because its size (4501994)   
	    * exceeds the configured maximum (2097152)"。  
	    * 此信息在commons-fileupload.jar,  
	    * org.apache.commons.fileupload.FileUploadBase源代码中第904行。  
	    *   
	    * 重写addActionError()以替换默认信息。   
	    */  
	   @Override  
	   public void addActionError(String anErrorMessage) {   
		   //这里要先判断一下,是我们要替换的错误,才处理   
		    if (anErrorMessage.startsWith("the request was rejected because its size")) {   
		                  //这些只是将原信息中的文件大小提取出来。   
		        Matcher m = Pattern.compile("\\d+").matcher(anErrorMessage);   
		        String s1 = "";   
		        if (m.find())   s1 = m.group();   
		        String s2 = "";   
		        if (m.find())   s2 = m.group();   
		                   //偷梁换柱,将信息替换掉   
		      // super.addActionError("你上传的文件(" + s1 + ")超过允许的大小(" + s2 + ")"); 
		        super.addActionError("您上传的附件过大,请确保单次所上传的附件大小总和没有超过20兆!"); 
		        isExceedMaximum=true;
		    } else {//不是则不管它   
		        super.addActionError(anErrorMessage);   
		    }   

	   }  

 

jsp:

 

<%@page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%@taglib uri="/struts-tags" prefix="s"%>
<html>      
    <body>      
      <!--fielderror-->      
     <s:if test="hasFieldErrors()">      
         <s:iterator value="fieldErrors">     
             <s:iterator value="value" status="statu">      
                <!-- //field的错误消息是List 因此还需要迭代一次 -->          
                 <s:set name="index" value="#statu.index"/>      
                 <s:set name="msg"  value="#msg+value.get(#request.index).toString()==null||#msg+value.get(#request.index).toString()=='null'?'':#msg+value.get(#request.index).toString()+'\\\n'"/><!-- 关键代码 不过开始时有null前缀未去掉   -- > 
              </s:iterator>      
         </s:iterator>    
     </s:if>      
     
         <!--actionerror      -->
     <s:if test="hasActionErrors()">      
         <s:iterator value="actionErrors">      
                <script   language="JavaScript">      
                 alert("<s:property escape="false"/>")      
                </script>      
             </s:iterator>      
     </s:if>      
     
         <!--  actionmessage      -->
     <s:if test="hasActionMessages()">      
         <s:iterator value="actionMessages">  
              <script>      
                 alert("<s:property escape="false"/>")      
             </script>      
         </s:iterator>      
      </s:if>      
     
      <!-- 打印转换好格式的fielderror信息      -->
     <s:if test="#msg.length()>0">      
         <script language="JavaScript">      
            // alert('<s:property escape="false" value="#msg"/>')  
             alert("可能资金格式不是数字,请确认!");  
         </script>      
     </s:if>  
        <script language="JavaScript">      
          history.back();     
         </script>        
     </body>      
</html>

 

struts2.xml actionl配置:

 

如果action中默认的拦截器栈包含fileupload拦截器,就不要另外配置。如myStack,defaultStack。否则addActionError()会多执行一次,页面“您上传的附件过大,请确保单次所上传的附件大小总和没有超过20兆!"的提示会alert2次;

 

全局大小配置:

struts.xml

 

<constant name= "struts.multipart.maxSize" value="20971520" />

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值