Struts 2约定插件 - 上传超过2 MB的文件

时间:2013-06-04 21:12:14

标签: java file-upload struts2 struts2-convention-plugin

如果我尝试上传超过2 MB大小的文件,则会出错。

我在apache网站上发现“有两个单独的文件大小限制。首先是来自Struts 2 default.properties文件的struts.multipart.maxSize。出于安全原因,此设置存在以禁止恶意用户上传用于提交服务器磁盘空间的极大文件。此设置默认为大约2兆字节,应调整为您需要框架接收的最大文件大小(最大2 ggs)“

所以我发现可以通过在struts.xml文件中添加带有所需最大限制<constant name="struts.multipart.maxSize" value="1000000" />的标记来解决此问题。

我们正在使用struts2-convention-plugin,所以我们没有struts.xml。所以我不确定在哪里定义这个最大文件大小...

如果你们中有人遇到过这个问题,请告诉我。

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

您还必须更改apache目录中server.xml文件夹下的conf文件。找到您正在使用的connector标记,并以字节为单位添加所需的maxPostSize

<Connector port="8080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           redirectPort="8443" 
           maxPostSize="2097152" />

答案 1 :(得分:1)

  1. 您可以在Struts.xml中定义最大大小( multipart.maxSize ,如您所说),以限制每个多部分请求的整体转移;

  2. 您还可以为 FileUpload Interceptor (默认为2MB)定义文件大小,包括全局包和单个Action(通过配置) struts.xml <action>标记中该拦截器的参数,或者在使用 约定插件时在Action内部对其进行注释

    <interceptor-ref name="fileUpload">
        <param name="maximumSize">10485760</param>
    </interceptor-ref>
    
  3. 这意味着,例如,如果您将整个多部分大小配置为20 MB,每个文件的最大大小为4 MB,则可以在单个请求中执行5个4 MB文件的多次上载; < / p>

    此处有更多信息:https://stackoverflow.com/a/15968166/1654265


    那就是说,你的问题是无问题;

    使用 Convention插件 并不意味着您没有 struts.xml ;这意味着

    • 可以使用动作中的注释
    • 可能避免使用 struts.xml ;
    • 当某些struts配置与动作无关时,比如multipart.maxSize,需要全局映射(结果,异常,自定义拦截器堆栈等),你绝对可以使用 struts.xml (创建它,如果它在那之前不存在)。

    Convention Plugin Documentation中没有提到它与 struts.xml 互斥(相反,如果您尝试在该页面上搜索“ struts.xml “,你会发现几次事件)