有关struts.messages.error.file.too.large和struts.messages.upload.error.SizeLimitExceededException的讨论总结

有关maximumSize与struts.multipart.maxSize的分析


今天在尝试Struts2框架中上传文件功能时无意间发现一处与意向中不太一样的情况。一开始想做自定义的错误信息输出总是失败,才发现struts2关于文件大小超出的错误信息由两种规定。

首先附上这两个变量的配置写法:

例:

maximumSize

<action name="FileUpload" class="cn.timefly.strutsTest.FileUploadAction">

    <result name="success">/FileUploadResult.jsp</result>

    <result name="input">/FileUpload.jsp</result>

    <interceptor-ref name="fileUpload">

      <param name="maximumSize">500000</param>

      <param name="allowedTypes">application/vnd.ms-powerpoint</param>     

    </interceptor-ref>

<interceptor-ref name="defaultStack" />

</action>

struts.multipart.maxSize

<constant name="struts.multipart.maxSize" value="9000000"/>

分析如下:


以下为struts2中struts-message.properties文件的官方文档


其中可以看出对于maxSize与maximumSize两个变量是有两种不同的错误信息抛出的。

struts.messages.error.file.too.large  

Occurs when the uploaded file is too large as specified by maximumSize. 

当上传的文件过大(如maximumSize所指定的那样)时发生

 

struts.messages.upload.error.SizeLimitExceededException 

Occurs when the upload request (as a whole) exceed configured struts.multipart.maxSize

当上传请求(作为一个整体)超过配置的struts.multipart.maxSize时发生

 

而Struts2对这两个配置的拦截处理也不相同:

struts.messages.error.file.too.large=File {0} is too large to be uploaded. Maximum allowed size is {4} bytes!

struts.messages.upload.error.SizeLimitExceededException=Request exceeded allowed size limit! Max size allowed is: {0} but request was: {1}!


当我不对这两个变量在框架中配置时,默认的struts.multipart.maxSize2M大小,当我在上传一个大于2M的文件时,拦截到的错误信息是struts.messages.upload.error.SizeLimitExceededException

而struts.multipart.maxSize掌控整个项目所上传文件的最大的Size。超过了这个size,后台报错,程序处理不了如此大的文件。fielderror里面会有如下的提示:

Request exceeded allowed size limit! Max size allowed is: {0} but request was: {1}!

如果我们需要对这两个参数进行配置,应当遵循以下规则

1.fileUpload拦截器的maximumSize属性必须小于struts.multipart.maxSize的值。

2.struts.multipart.maxSize默认2M,当maximumSize大于2M时,必须设置struts.multipart.maxSize的值大于maximumSize。

3.当上传的文件大于struts.multipart.maxSize时,系统报错,当上传的文件在struts.multipart.maxSize和maximumSize之间时,系统提示:

File {0} is too large to be uploaded. Maximum allowed size is {4} bytes!

4.所以上传文件大小应 < maximumSize < maxSize,才可以上传成功。


总结:在配置两个变量时应该注意相应的大小关系,并且当有需求进行自定义错误信息提示时,也需要看一下struts抛出的是哪种类型的错误。切不可像笔者一样不注意错误,盲目的修改提示信息却无法应用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值