struts2在上传时控制文件大小时错误
严重: org.apache.commons.fileupload.FileUploadBase$SizeLimitExceededException: the request was rejected because its size (2164310) exceeds the configured maximum (2097152)
2008-8-28 23:37:57 org.apache.struts2.interceptor.FileUploadInterceptor intercept
严重: the request was rejected because its size (2164310) exceeds the configured maximum (2097152)
2008-8-28 23:37:57 org.apache.struts2.interceptor.FileUploadInterceptor intercept
严重: the request was rejected because its size (2164310) exceeds the configured maximum (2097152)
struts2在上传时控制文件大小时错误,但文件类型可以控制,请问这是什么原因 展开
org.apache.commons.fileupload.FileUploadBase$SizeLimitExceededException: the request was rejected because its size (2164310) exceeds the configured maximum (2097152)
日志显示上传文件大于配置文件许可的大小,所有抛出了异常。
Struts2框架底层默认用的是apache的commons-fileupload组件对上传文件进行处理。
struts.multipart.maxSize设置的大小就是该处理时取用的值,在上传文件之前系统会去比较文件的大小是否超过了该值,如果超过将抛出上述异常,并且commons-fileupload组件是不支持国际化的,所以我们看到的异常都是默认的。
你可以查看上传组件的源码,他的异常是Action级别的。
所以如果你还想用这种方法进行异常处理的话,可以这么做:
在action中直接重写ActionSupport的addActionError()方法
判断字符串是不是the request was rejected because its size 这样的字符串。
示例代码:
@Override
public void addActionError(String anErrorMessage) {
//判断是否是文件上传超过限制大小异常
if (anErrorMessage.startsWith("the request was rejected because its size")) {
super.addActionError("你上传的文件大小超过允许的大小!");
} else {
//如果不是文件上传大小异常则按原来的方法处理
super.addActionError(anErrorMessage);
}
}
页面加上个<s:fielderror/>
ok了。
需要注意的是,原来页面上的其他输入信息都会消失不见。
因为此异常是在上传前捕获的。