gpt4 book ai didi

java - 使用 Spring 4 处理 FileUploadBase.SizeLimitExceededException

转载 作者:行者123 更新时间:2023-11-30 10:32:21 25 4
gpt4 key购买 nike

我在使用 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 捕获到异常并尝试转发到一个完全不同的页面(我尝试使用重定向而不是转发和问题仍然存在)。

为什么它在两种情况下的表现不同?我该如何解决这个问题?

我尝试设置 webmvc.multipart.maxInMemorySize=-1webmvc.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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com