【问题标题】:Struts2 Upload File, validating size and content type file before send fileStruts2上传文件,在发送文件之前验证文件的大小和内容类型
【发布时间】:2012-10-05 16:30:37
【问题描述】:

我对 Struts 2 及其文件上传拦截器有疑问。它已验证我的内容类型和文件大小,但上传过程不会停止。 示例我的上传限制为 2Mb,用户发送一个 500MB 的文件,拦截器 struts 2 记录该文件太大,但继续上传文件

我想停止上传过程,在错误的情况下,因为struts2只有在发送文件完成后才返回我的页面。

谢谢

【问题讨论】:

  • 据我了解,服务器可以在上传文件后验证它。
  • 我不认为你可以,因为实际的物理上传是由服务器处理的——标准的 Http MultiPart 表单处理和 Struts 在请求完成之前不会控制请求。您可以通过您的 servlet 容器/互联网服务器做一些事情

标签: file validation upload struts2 size


【解决方案1】:

您不能在 Struts 中 - 因为 Struts 在您的 servlet 容器完成处理之前不会获取响应对象。

但是 - 大多数容器都有控制上传文件大小的方法,对于 tomcat,这是 maxPostSize 参数(默认为 2GB) - 据我所知,tomcat 将计算传入字节数,然后在此情况下退出值超过。即 Tomcat 不会继续读取超过 maxPostSize。其他容器将具有类似的配置参数。我从未使用过它,所以在这里我无法提供任何进一步的帮助。

如果您有嵌套的容器/服务(例如,位于 Apache Web 服务器后面的 tomcat),请确保配置正确的

【讨论】:

  • 嗨@user497087 谢谢,真的我不能拦截请求,直到它被处理。我正在使用 Jetty,前面有一个 Apache。我会看看如何配置 Jetty。
【解决方案2】:

你可以。尝试这个。它有效..

<action name="uploadDocs" class="com.test.myapp.UploadAction" method="upload">
    <interceptor-ref name="fileUpload">
        <param name="maximumSize">2097152</param> <!-- Max 2 MB limit per file-->
        <param name="allowedTypes">image/jpeg,image/bmp</param>
    </interceptor-ref>
    <interceptor-ref name="defaultStack"/>
    <interceptor-ref name="execAndWait"/>
        <param  name="delay">1000</param>
        <result name="wait">wait.jsp</result> <!-- display custom please wait page -->
    <result name="success">cmresulttemp.jsp</result>
    <result name="input">attachfiles.jsp</result>
    <result name="error">attachfiles.jsp</result>
</action>

如果您想限制上传内容的总大小(不是每个文件),请将其添加到您的 struts.xml 文件的顶部

<constant name="struts.multipart.maxSize" value="10485760" /> <!-- Total 10 MB-->

【讨论】:

  • 此解决方案不会停止上传。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-04-12
  • 1970-01-01
  • 2012-07-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多