spring-boot 上传文件报错“spring.servlet.multipart.max-file-size”
最近遇到这么一个问题,前后折磨了两天,最近有空记载一下,以供学习!不多说,直接上思路:该问题本质其实就是上传的文件过大,超过了设定的阈值,然后服务直接给你断了,文件上传到一半就失败了首先,根据在各大博客中搜索,最多的答案都是:需要在application.properties中配置:里面包括Spring Boot 1.3.x ,Spring Boot 1.4.x and 1.5.x,Spring
·
最近遇到这么一个问题,前后折磨了两天,最近有空记载一下,以供学习!
不多说,直接上思路:该问题本质其实就是上传的文件过大,超过了设定的阈值,然后服务直接给你断了,文件上传到一半就失败了
首先,根据在各大博客中搜索,最多的答案都是:需要在application.properties中配置:
#配置文件传输
spring.servlet.multipart.enabled =true
spring.servlet.multipart.file-size-threshold =0
#单个数据的大小
spring.servlet.multipart.max-file-size = 100Mb
#总数据的大小
spring.servlet.multipart.max-request-size=100Mb
里面包括Spring Boot 1.3.x ,Spring Boot 1.4.x and 1.5.x,Spring Boot 2.x各种不同版本的不同写法我全部都试过了,但是依然没用。
为了确定是否是因为配置未生效所导致的,我直接在启动类里,添加如下代码
@Bean
public MultipartConfigElement multipartConfigElement() {
MultipartConfigFactory factory = new MultipartConfigFactory();
//单个文件最大
factory.setMaxFileSize(DataSize.parse("100MB"));
/// 设置总上传数据总大小
factory.setMaxRequestSize(DataSize.parse("100MB"));
return factory.createMultipartConfig();
}
通过断点能肯定,配置确实已经生效了,但是问题依然未解决。于是,我开始把问题重新定位,如果问题不在后台,那只能在前台,我把思路转向了nginx配置,经过我的一番查找,终于发现了新思路,在nginx的nginx.conf配置文件中加上
http {
client_max_body_size 100M;
}
来调整允许的客户端上传文件的body大小。设置为0,表示不限制。
前台如果需要做个错误提示展现,可以在后台写个全局拦截,用作反馈提示。代码如下
@RestControllerAdvice
public class GlobalExceptionHandler {
static final Logger logger = LoggerFactory.getLogger(GlobalExceptionHandler.class);
@ExceptionHandler(value = Exception.class)
public @ResponseBody
ResultWrapper handleBusinessException(Exception ex) {
String msg;
if (ex.getCause().getCause() instanceof FileSizeLimitExceededException) {
logger.error(ex.getMessage());
msg = "上传文件过大[单文件大小不得超过100M]";
} else if (ex.getCause().getCause() instanceof SizeLimitExceededException) {
logger.error(ex.getMessage());
msg = "上传文件过大[总上传文件大小不得超过100M]";
} else {
msg = "上传文件失败";
ResultWrapper.error(500, msg);
}
return ResultWrapper.error(500, msg);
}
}
至此,问题解决!
更多推荐
已为社区贡献2条内容
所有评论(0)