首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > Web前端 >

struts2大文件下传异常处理

2012-09-19 
struts2大文件上传错误处理问题描述:前段时间在struts2下做文件上传,当上传大文件时出现了几个问题。?问题1

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; *  */@Overridepublic 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                                       {                                             .....                                             ....                                      }                                }

?

热点排行