您的位置:首页 > 编程语言 > Java开发

struts2上传文件过大问题的处理

2011-07-28 17:22 495 查看
问题描述:前段时间在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中设置f上传文件的大小小于10000000,这样就能按照你的方式来处理了。
if (file != null) {
if(file.length() <= 2097152) //大于2M 2M= 2*1024*1024
{
.....
....
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: