我有简单的SpringBoot应用程序文件上传功能,其中最大文件上传文件大小为2 MB。

我已经配置了multipart.max-file-size=2MB,它工作正常。
但是,当我尝试上传大于2 MB的文件时,我想处理该错误并显示错误消息。

为此,我的 Controller 使用HandlerExceptionResolver实现来实现resolveException(),如下所示:

public ModelAndView resolveException(HttpServletRequest request,
            HttpServletResponse response, Object handler, Exception exception)
    {
        Map<String, Object> model = new HashMap<String, Object>();
        if (exception instanceof MaxUploadSizeExceededException)
        {
            model.put("msg", exception.getMessage());
        } else
        {
            model.put("msg", "Unexpected error: " + exception.getMessage());
        }

        return new ModelAndView("homepage", model);
    }

问题是获取的异常是 MultipartException 而不是 MaxUploadSizeExceededException

stacktrace是:
无法解析多部分servlet请求;嵌套异常是java.lang.IllegalStateException:org.apache.tomcat.util.http.fileupload.FileUploadBase $ FileSizeLimitExceededException:myFile字段超出了其最大允许大小2097152字节。

如果文件大小超出限制,为什么不获取 MaxUploadSizeExceededException ?我得到它的父异常 MultipartException ,除了文件大小超出限制之外,还有很多其他原因。

有什么想法吗?

最佳答案

我遇到了同样的问题,看起来只有Commons File Upload实现的MultipartResolver抛出MaxUploadSizeExceededException,而MultipartResolver Servlet 3.0实现却没有。

到目前为止,这是我所做的。此处的关键是允许在 Controller 上检查文件,然后您可以验证大小并设置错误。

  • 在下面设置多部分属性
    多部分:
    最大文件大小:-1
    最大请求大小:-1
  • 设置Tomcat 8(maxSwallowSize =“-1”)
  • Controller 上的
  • ,添加逻辑以检查大小

    if(fileAttachment.getSize()> 10485760){
    抛出新的MaxUploadSizeExceededException(fileAttachment.getSize());
  • 09-08 03:11