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

你可能感兴趣的:(struts,服务器,null,url,input,action)