我有简单的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
if(fileAttachment.getSize()> 10485760){
抛出新的MaxUploadSizeExceededException(fileAttachment.getSize());