专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > 软件架构设计

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

发布时间:2011-06-20 02:10:45 文章来源:www.iduyao.cn 采编人员:星星草
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" />

友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: