`
zhouchaofei2010
  • 浏览: 1086553 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

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" />

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics