struts中文件上传的大小控制

本文介绍了如何在Struts框架中设置文件上传的最大尺寸,并通过服务器端验证文件大小,避免过大的文件导致服务器负载过高。同时提供了如何判断文件是否超出大小限制的方法。

在做文件上传时通常都要限制上传文件的大小,如果文件过大就要返回给用户一个错误信息。这在客户端用JS是可以实现的(我刚刚也发过了),但对于验证操作如果只在客户端使用JS验证的话显然是不安全的,一定还是要有服务器端验证才行。最开始想到的办法是用FormFile.getFileSize()方法,如果这样的话就有一个问题了,该方法是先将文件保存到服务器的内存中再进行判断的,如果有人上传了一个1G的文件,那么服务器不就直接挂掉了!这样肯定是不行的。后来在网上查到可以配置了文件的大小,这样在上传的过程中,如果文件超过了配置的大小,就会终止文件的上传。方法是在struts-config.xml文件中配置:

<struts-config>


<controller maxFileSize="716800" inputForward="false" />
<message-resources parameter="com.sanco.freep.struts.ApplicationResources" key="zsy"/>
</struts-config>

原文:http://www.java3z.com/cwbwebhome/article/article1a/168.html?id=359

这样文件过大上传失败时actionForm里面所有的字段都会为null。我们无法简单的通过判断FormFile是否为空来用户的文件是否超过了配置的大小,不过struts为我们提供了一个途径,在文件超过配置大小时struts会在Servelet Request设置一个属性, MultipartRequestHandler.ATTRIBUTE_MAX_LENGTH_EXCEEDED,它的值是一个Boolean类型的变量,所以我们可以在Action的execute方法中通过如下代码判断文件是否”超标“:

        Boolean maxLengthExceeded = (Boolean) request.getAttribute(
                               MultipartRequestHandler.ATTRIBUTE_MAX_LENGTH_EXCEEDED);
       
        if ((maxLengthExceeded != null) && (maxLengthExceeded.booleanValue()))

        {

                  Blar, Blar...

        }

注意:这里的actionForm里面所有的字段都会为null,所以如果使用的Action是DispatchAction的话,那么parameter参数也会为空,那么就会有问题了。

在一个就是<controller maxFileSize="716800" inputForward="false" />的inputForward参数。其默认值是true,看着字面的意思是如果文件超过了maxFileSize就跳转到input代表的页面。其实不然,它的意思是根据提交页面的url到action的forwards里边找一个名称是url的forward,然后返回这个forward代表的页面。不知道说清楚了没有,大家可以看下面的一个例子

     比如我从/input/input.jsp上传一个超标的大文件到actionA,那么struts在validate错误后就会查找actionA的名称叫做/input/input.jsp的actionforward并返回,所以如果我配置了<forward name="/input/input.jsp" path="/input/input.jsp"/>,那么页面的返回就是正常的。

原文:http://www.javaeye.com/topic/113607

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值