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 { ..... .... } }?