Struts2上传文件过大的反馈处理

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

 

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

 

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

 

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

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

 

Java代码 复制代码 收藏代码
  1. /**
  2. * 替换文件上传中出现的错误信息 引用 import java.util.regex.Matcher; import
  3. * java.util.regex.Pattern;
  4. *
  5. */
  6. @Override
  7. public void addActionError(String anErrorMessage) {
  8. // 这里要先判断一下,是我们要替换的错误,才处理
  9. if (anErrorMessage
  10. .startsWith("the request was rejected because its size")) {
  11. Matcher m = Pattern.compile("\\d+").matcher(anErrorMessage);
  12. String s1 = "";
  13. if (m.find())
  14. s1 = m.group();
  15. String s2 = "";
  16. if (m.find())
  17. s2 = m.group();
  18. // 偷梁换柱,将信息替换掉
  19. super.addActionError("你上传的文件大小(" + s1 + ")超过允许的大小(" + s2 + ")");
  20. // 也可以改为在Field级别的错误
  21. // super.addFieldError("file","你上传的文件大小(" + s1 + ")超过允许的大小(" + s2 +
  22. // ")");
  23. } else {// 否则按原来的方法处理
  24. super.addActionError(anErrorMessage);
  25. }
  26. }
/**
	 * 替换文件上传中出现的错误信息 引用 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,这样就能按照你的方式来处理了。

 

Java代码 复制代码 收藏代码
  1. if (file != null) {
  2. if(file.length() <= 2097152) //大于2M 2M= 2*1024*1024
  3. {
  4. .....
  5. ....
  6. }
  7. }
 if (file != null) {
                                      if(file.length() <= 2097152)  //大于2M 2M= 2*1024*1024
                                       { 

                                            .....

                                             ....

                                      }

                                }

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值