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

来源:互联网 发布:java版百战天虫 编辑:程序博客网 时间:2024/04/28 01:45

Action:

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

 

jsp:

 

Jsp代码 复制代码 收藏代码
  1. <%@page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>   
  2. <%@taglib uri="/struts-tags" prefix="s"%>   
  3. <html>         
  4.     <body>         
  5.       <!--fielderror-->         
  6.      <s:if test="hasFieldErrors()">         
  7.          <s:iterator value="fieldErrors">        
  8.              <s:iterator value="value" status="statu">         
  9.                 <!-- //field的错误消息是List 因此还需要迭代一次 -->             
  10.                  <s:set name="index" value="#statu.index"/>         
  11.                  <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前缀未去掉   -- >    
  12.               </s:iterator>         
  13.          </s:iterator>       
  14.      </s:if>         
  15.         
  16.          <!--actionerror      -->   
  17.      <s:if test="hasActionErrors()">         
  18.          <s:iterator value="actionErrors">         
  19.                 <script   language="JavaScript">         
  20.                  alert("<s:property escape="false"/>")         
  21.                 </script>         
  22.              </s:iterator>         
  23.      </s:if>         
  24.         
  25.          <!--  actionmessage      -->   
  26.      <s:if test="hasActionMessages()">         
  27.          <s:iterator value="actionMessages">     
  28.               <script>         
  29.                  alert("<s:property escape="false"/>")         
  30.              </script>         
  31.          </s:iterator>         
  32.       </s:if>         
  33.         
  34.       <!-- 打印转换好格式的fielderror信息      -->   
  35.      <s:if test="#msg.length()>0">         
  36.          <script language="JavaScript">         
  37.             // alert('<s:property escape="false" value="#msg"/>')     
  38.              alert("可能资金格式不是数字,请确认!");     
  39.          </script>         
  40.      </s:if>     
  41.         <script language="JavaScript">         
  42.           history.back();        
  43.          </script>           
  44.      </body>         
  45. </html>  

 

struts2.xml actionl配置:

 

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

 

全局大小配置:

struts.xml

 

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

原创粉丝点击