struts2大文件上传错误处理

问题描述:前段时间在struts2下做文件上传,当上传大文件时出现了几个问题。

 

问题1:当有大文件上传时,即超过struts2配置的最大值时会报出一段英文的出错信息, "the request was rejected because its size ..."

 

问题2: 由于错误的产生,原来页面上输入的内容也全部不见了,也就是说参数(params)注入失败。

 

解决方法:解决第一个问题的方法挺多,现只列举最简便的方法。

               解决方案1:  解决方法在上传文件的的action加入对addActionError方法的重写,代码如下:

               

/**
	 * 替换文件上传中出现的错误信息 引用 import java.util.regex.Matcher; import
	 * java.util.regex.Pattern;
	 * 
	 */
	@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 + ")");
			// 也可以改为在Field级别的错误
			// super.addFieldError("file","你上传的文件大小(" + s1 + ")超过允许的大小(" + s2 +
			// ")");
		} else {// 否则按原来的方法处理
			super.addActionError(anErrorMessage);
		}
	}

     这种解决方法的弊病是,无法将问题2来解决,下面推荐解决方案2。

     解决方案2:  将struts2的默认上传文件大小调大,在struts.xml中加入

<constant name="struts.multipart.maxSize" value="10000000" />,这样整个系统中的上传大小最大都为 10000000byte了,但是如果超过了这个大小还是出现上述问题,所以最好能设置一个超大数(汗)。然后在上传的action中设置上传文件的大小小于10000000,这样就能按照你的方式来处理了。

   

 if (file != null) {
                                      if(file.length() <= 2097152)  //大于2M 2M= 2*1024*1024
                                       { 

                                            .....

                                             ....

                                      }

                                }

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值