【问题标题】:how to handle MaxUploadSizeExceededException: Maximum upload in servlet如何处理 MaxUploadSizeExceededException:servlet 中的最大上传
【发布时间】:2014-03-01 15:50:03
【问题描述】:

我发现 Apache Tomcat 允许以下配置,采用硬编码或注释方法。我不确定最大文件大小是在上传过程中还是在文件上传到临时位置之后计算的。该文档指出以下内容:

@MultipartConfig 注解支持以下可选属性:

location:文件系统上目录的绝对路径。这 location 属性不支持相对于应用程序的路径 语境。此位置用于临时存储文件,而 部分被处理或当文件的大小超过指定的 文件大小阈值设置。默认位置是“”。

fileSizeThreshold:文件大小(以字节为单位),之后文件将被 临时存储在磁盘上。默认大小为 0 字节。

MaxFileSize:上传文件允许的最大大小,以字节为单位。如果 任何上传文件的大小大于此大小,网络 容器将抛出异常 (IllegalStateException)。默认 大小是无限的。

maxRequestSize:multipart/form-data 允许的最大大小 请求,以字节为单位。 Web 容器将抛出异常,如果 所有上传文件的总大小超过此阈值。默认 大小是无限的。

注解方式:

@MultipartConfig(location="/tmp", fileSizeThreshold=1024*1024, 
maxFileSize=1024*1024*5, maxRequestSize=1024*1024*5*5)

如果有人能澄清在上传过程中是否计算了 MaxFileSize 以及如何在 servlet 中处理此异常,我将不胜感激。

【问题讨论】:

  • 你见过tutorialthis one吗?
  • 是的,我已经有了这篇文章,但是没有提到在上传过程中或之前计算 Maxfilesize 的时间,如果你告诉我如何处理 servlet 中的 MaxUploadSizeExceededException,这将有所帮助。

标签: java jsp jakarta-ee servlets servlet-3.0


【解决方案1】:

如果上传的文件大小超过配置的最大值,会抛出IllegalStateException异常。

当您尝试通过调用HttpServletRequest.getParts()HttpServletRequest.getPart() 来获取请求的部分时会发生这种情况。所以最简单的方法就是简单地将它放入一个try-catch 块中,如下所示:

protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

    Parts parts = null
    try {
        parts = request.getParts();
    } catch (IllegalStateException e) {
        // File or request is too big!
        // Here you can send back an error message to the client,
        // I just send back an HTTP 400 (Bad Request) error page.
        response.sendError(HttpServletResponse.SC_BAD_REQUEST);
        return;
    }

    // Process parts...
}

【讨论】:

  • 有没有办法重新配置最大允许值?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-12-28
  • 2017-02-18
  • 1970-01-01
  • 2012-04-17
  • 2014-03-03
  • 1970-01-01
相关资源
最近更新 更多