我在使用 Spring 处理文件上传异常时遇到问题。
我有下一个 multipartResolver:
@Bean
public MultipartResolver multipartResolver() {
CommonsMultipartResolver commonsMultipartResolver = new CommonsMultipartResolver();
commonsMultipartResolver.setDefaultEncoding(this.defaultEncoding);
commonsMultipartResolver.setMaxInMemorySize(this.maxInMemorySize);
commonsMultipartResolver.setMaxUploadSize(this.maxUploadSize);
commonsMultipartResolver.setMaxUploadSizePerFile(this.maxUploadSizePerFile);
return commonsMultipartResolver;
}
使用下一个常量值:
webmvc.multipart.maxInMemorySize=10485760 //10MB
webmvc.multipart.maxUploadSize=10485760 //10MB
webmvc.multipart.maxUploadSizePerFile=5242880 //5MB
我有下一个 GlobalExceptionHandler:
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(value = MultipartException.class)
public String handleMultipartException(Exception ex, HttpServletRequest request) {
if (ex instanceof MultipartException) {
final MultipartException mEx = (MultipartException) ex;
if (ex.getCause() instanceof FileUploadBase.FileSizeLimitExceededException) {
final FileUploadBase.FileSizeLimitExceededException flEx = (FileUploadBase.FileSizeLimitExceededException) mEx.getCause();
request.setAttribute("size", flEx.getPermittedSize());
} else if (ex.getCause() instanceof FileUploadBase.SizeLimitExceededException) {
final FileUploadBase.SizeLimitExceededException flEx = (FileUploadBase.SizeLimitExceededException) mEx.getCause();
request.setAttribute("size", flEx.getPermittedSize());
} else {
request.setAttribute("error", ex.getMessage());
}
} else {
request.setAttribute("error", ex.getMessage());
}
return "forward:/errors.do";
}
}
如果我上传一个小于 5MB 的文件,一切正常,不会引发任何异常,并且文件会正确上传。
如果我上传 5MB 到 10MB 之间的文件,异常会被我的 GlobalExceptionHandler 捕获,结果会显示在我的页面/errors
但是,如果我上传的文件大于 10MB,我的 GlobalExceptionHandler 会捕获异常并转发到/errors,但是!,然后 GlobalExceptionHandler 会再次捕获异常,并继续执行直到时间结束。
如果我没有误解的话,即使在 GlobalExceptionHandler 捕获异常并尝试转发到完全不同的页面之后,CommonsMultipartResolver 似乎也会一遍又一遍地处理我的多部分内容(我尝试使用重定向而不是转发,并且问题仍然存在)。
为什么它在两种情况下的表现不一样?我该如何解决这个问题?
我尝试设置 webmvc.multipart.maxInMemorySize=-1
和 webmvc.multipart.maxUploadSize=-1
但每当我上传更大的内容时就会发生此行为超过 5MB。
最佳答案
我认为您需要 MaxUploadSizeExceededException
的异常处理程序
@ExceptionHandler(MaxUploadSizeExceededException.class)
public String handleError(MaxUploadSizeExceededException e, RedirectAttributes redirectAttributes) {
.......
}
您可以在此处查看更多内容
https://www.mkyong.com/spring/spring-mvc-how-to-handle-max-upload-size-exceeded-exception/
关于java - 使用 Spring 4 处理 FileUploadBase.SizeLimitExceededException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42717777/