`
bill_sbia
  • 浏览: 158735 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Structs上传文件大小问题1

阅读更多

     先说一下我想达到的目的,就是在程序中可以控制用户上传文件的大小,如果用户文件的大小超过了配置的大小就给用户返回错误提示信息。最开始的时候我想到的方法是通过FormFile.getFileSize()方法来判断文件的大小是否超标,如果超标,就想用户返回错误信息。但是这种方法的最大问题就是用户的文件已经上传到服务器并且保存在内存中了,万一用户上传了一个1000M的文件怎么办,服务器还不直接挂了。

   后来参照struts的文档,配置了文件的大小(<controller maxfilesize="1K"></controller>),这样在上传的过程中,如果文件超过了配置的大小,就会终止文件的上传。相应的FormFile字段为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...

        }

到此好像事情已经解决了,但是我遇到了另外一个问题:

         我所有Action都是继承自DispatchAction,parameter配置的名称是action。如果我上传的文件没有超过大小,一切OK,程序运行正常,struts根据我设定的action值调用了相应的方法。但是如果我上传了一个比较大的文件,struts就报错说action的值没有设置。不会吧,老大,我明明设置了值,怎么说没有设置呢?有没有搞错,大哥??

       到网上找了找也没有相关的文章,没有办法,只用硬着头皮看代码。原来sturts在处理文件上传过程中如果文件的大小超过了配置的大小,那么它就不会对Form中的属性设值,说白了就是Form中的字段都是初始状态,所以action没有设值也就属于正常了。

     为了解决这个问题,我把判断文件是否超标的代码放到了Form的validate方法,如果超标就直接返回input页面。但是问题又出现了,在validate返回ActionErrors对象后,页面应该自动返回到input页面,但是我在调试过程中页面怎么也无法返回到input,返回的总是一个空白页面,不光是这一个action出了问题,所有其他返回mapping.getInputForward()的action都不能正常返回了。怎么办?凉拌?看代码呀!

    原来<controller maxfilesize="1K"></controller>(<controller maxfilesize="1K"></controller>还有一个参数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"></forward>,那么页面的返回就是正常的。知道了inputForward的意思解决方案就简单了,直接inputForward=false就OK了,如下:

分享到:
评论

相关推荐

    struts文件上传大小限制问题

    在处理文件上传功能时,Struts框架会涉及到文件大小的限制,以防止恶意用户上传过大的文件导致服务器资源耗尽。本篇文章将详细探讨Struts文件上传大小限制的问题。 首先,我们需要理解文件上传的基本流程。在Struts...

    JavaEE Struts文件上传

    Struts框架通过解析这个格式化的请求,可以获取到上传文件的信息。 1. **配置Struts2 Action**:在Struts2中,我们需要创建一个Action类来处理文件上传请求。这个类通常需要实现`ServletRequestAware`接口,以便...

    Struts1文件上传、单文件、多文件上传(上传文件大小问题,如何设置无限制)

    本文将详细介绍如何在Struts1中实现单文件上传和多文件上传,并探讨如何解决上传文件大小限制的问题。 #### 二、单文件上传 ##### 1. JSP页面设计 为了实现单文件上传,我们需要在JSP页面中创建一个表单,该表单...

    struts2实现文件上传下载

    可以通过验证文件扩展名、限制文件大小和类型,以及将上传的文件保存到指定的安全目录来提高安全性。 6. **优化与拓展** 对于大量文件上传,可以考虑使用多线程处理,提高上传效率。还可以添加进度条显示、断点续...

    struts2文件上传下载源代码

    2. **设置Struts2配置**:配置文件需要指定允许上传的文件大小、类型等。例如,使用`&lt;constant&gt;`标签设置`struts.multipart.parser`为`jakarta`,以启用`Commons FileUpload`。 3. **编写Action类**:在Action类中...

    struts2文件上传,文件大小设置

    本篇将详细介绍Struts2中如何进行文件大小设置,以及涉及到的拦截器配置和灵活性。 首先,我们需要理解Struts2的文件上传机制。在Struts2中,文件上传是通过`&lt;s:file&gt;`标签实现的,这个标签会创建一个`File`对象,...

    struts1实现文件上传

    1. **获取上传文件**:通过`HttpServletRequest`对象获取上传的文件信息。 2. **验证文件格式**:检查上传文件是否符合预设的格式要求。如代码片段所示,只允许`.jpg`, `.txt`, 和`.bmp`三种格式的文件被上传。 ...

    struts1 文件上传 文件下载

    2. **大小限制**:设置上传文件大小的上限,防止过大文件耗尽服务器资源。 3. **文件类型检查**:仅允许特定类型的文件上传,避免恶意文件上传。 4. **存储位置**:将上传文件存储在安全目录,避免暴露敏感信息或...

    struts1上传文件带进度条

    Struts1是一个经典的Java Web框架,它为开发者提供了一种模型-视图-控制器(MVC)架构,便于构建企业级应用。...在实际开发中,我们还需要考虑安全性,比如限制文件大小、检查文件类型,防止恶意文件上传。

    struts1的文件上传

    在实现文件上传时,还需要注意安全问题,比如防止恶意文件上传(如脚本文件)、限制文件大小和类型、防止路径遍历攻击等。在处理文件上传时,应该对上传的文件进行验证和过滤,确保服务器的安全。 综上所述,...

    struts文件上传大小限制

    在Struts中处理文件上传功能时,有时我们需要对上传的文件大小进行限制,以防止恶意用户上传过大的文件导致服务器资源耗尽或者内存溢出等问题。本文将深入探讨Struts中文件上传大小限制的设置及其常见错误处理。 一...

    struts框架-文件上传下载

    1. 大小限制:为了避免DoS攻击,需要限制上传文件的大小。可以在Struts配置中设置最大上传大小,或者在服务器层面进行限制。 2. 文件类型检查:对上传的文件类型进行检查,只允许特定类型的文件上传,防止恶意文件...

    struts+spring文件上传大小限制.rar

    如果上传文件大小超过这个限制,Struts会抛出`MaxUploadSizeExceededException`异常。 2. Spring框架中的文件上传: Spring提供了`CommonsMultipartFile`类来处理文件上传,它是基于Apache Commons FileUpload库的...

    struts 单文件上传和多文件上传带进度条

    Struts是Apache软件基金会的一个开源项目,它是一个基于MVC(Model-View-Controller)设计模式的Java Web应用框架,...不过,实际应用中还需考虑错误处理、文件大小限制、安全策略等问题,确保应用的健壮性和安全性。

    struts2文件上传

    默认情况下,这个拦截器可能会限制上传文件的类型为`.txt`,并且大小不超过10MB。这种限制是为了防止恶意用户上传大文件或者非文本文件,从而可能对服务器造成压力或引入安全风险。 配置文件`struts.xml`中关于文件...

    Struts2文件上传

    这里的`fileUpload`拦截器负责处理文件上传,`allowedTypes`参数用于限制上传文件的类型,`maximumSize`参数设定允许的最大文件大小。 接着,我们需要创建对应的Action类(UploadAction),这个类需要继承自Struts2...

    struts2.1.3上传文件

    -- 设置最大上传文件大小 --&gt; &lt;result name="success"&gt;/success.jsp &lt;result name="input"&gt;/upload.jsp ``` 在这个配置中,我们使用了`fileUpload`拦截器来设定文件大小限制,并根据执行结果("success"或...

    struts 文件上传 Struts实现文件上传

    - `FormFile`: 用于封装上传文件的信息,包括文件名、类型、大小等。 ### 4. 配置文件 在Struts配置文件(struts-config.xml)中,你需要添加`multipart-config`元素到`&lt;form-beans&gt;`部分,指定文件上传的临时存储...

    Struts1实现的文件上传

    5. **安全考虑**:文件上传时需要考虑安全性问题,如防止上传恶意文件、限制文件类型和大小等。你可以通过检查文件扩展名、使用白名单策略、设置最大上传大小等手段来增加安全性。 6. **错误处理**:在处理文件上传...

    Struts AJAX文件上传

    需要注意文件大小限制、文件类型检查和异常处理。 6. **返回响应**:Action执行完毕后,返回一个表示上传结果的JSON或XML响应。客户端的AJAX回调函数接收到这个响应,可以更新页面显示,告知用户文件是否成功上传。...

Global site tag (gtag.js) - Google Analytics