这是一个老问题,所以我为那些正在努力解决这个问题的未来的人(包括未来的我)添加它春季启动2.
首先,您需要配置 spring 应用程序(在属性文件中):
spring.servlet.multipart.max-file-size=10MB
spring.servlet.multipart.max-request-size=10MB
如果您使用的是嵌入式 Tomcat(很可能是这样,因为它是标准配置),配置 Tomcat 使其不取消带有大正文的请求也很重要
server.tomcat.max-swallow-size=-1
或者至少将其设置为相对较大的尺寸
server.tomcat.max-swallow-size=100MB
如果您不为 Tomcat 设置 maxSwallowSize,您可能会浪费大量时间来调试为什么处理错误但浏览器没有响应 - 这是因为如果没有此配置,Tomcat 将取消请求,即使您会在日志中看到该应用程序正在处理错误,浏览器已经收到来自 Tomcat 的请求取消,并且不再侦听响应。
并处理最大上传大小超出异常你可以加控制器建议 with 异常处理器.
下面是 Kotlin 中的一个简单示例,它仅设置一个带有错误的 flash 属性并重定向到某个页面:
@ControllerAdvice
class FileSizeExceptionAdvice {
@ExceptionHandler(MaxUploadSizeExceededException::class)
fun handleFileSizeException(
e: MaxUploadSizeExceededException,
redirectAttributes: RedirectAttributes
): String {
redirectAttributes.addFlashAttribute("error", "File is too big")
return "redirect:/"
}
}
注意:如果您想直接在控制器类中使用 ExceptionHandler 处理 MaxUploadSizeExceededException,您应该配置以下属性:
spring.servlet.multipart.resolve-lazily=true
否则该异常将在请求映射到控制器之前被触发。