如何处理MaxUploadSizeExceededException:servlet中的最大上载量

时间:2014-02-05 09:38:17

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

我发现Apache Tomcat允许以下配置,在硬编码或注释方法中。我不确定在上传过程中或文件上传到临时位置后是否计算了max-file-size。文档说明如下:

  

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

     

location:文件系统上目录的绝对路径。该   location属性不支持相对于应用程序的路径   上下文。此位置用于临时存储文件   处理部件或文件大小超过指定的部分   fileSizeThreshold设置。默认位置为“”。

     

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中处理此异常,我感激不尽。

1 个答案:

答案 0 :(得分:0)

如果要上传的文件大小超过配置的最大值,则会引发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...
}