spring boot上传大文件报错:org.apache.tomcat.util.http.fileupload.FileUploadBase$SizeLimitExceededException

今天和大家分析一下 上传文件报错 问题解决:

一、错误场景描述:上传文件接口一直都很正常,突然有一天生成环境上传 报错,接口都没有进入控制层,一看报错日志,发现好像和文件大小有关,核心日志如下:

org.springframework.web.multipart.MultipartException: Could not parse multipart servlet request; nested exception is java.lang.IllegalStateException: org.apache.tomcat.util.http.fileupload.FileUploadBase$SizeLimitExceededException: the request was rejected because its size (18363980) exceeds the configured maximum (10485760)

二、分析结果:项目使用的是Spring Boot / Spring Cloud,上传文件报超出自带tomacat限制大小(默认1M);同时springMVC或struts框架也是这种限制,即也会遇到同样问题,举一反三。

三、解决办法:

方案1、在配置文件(application.properties)加入如下配置

#单个文件数据大小限制
spring.http.multipart.maxFileSize = 20Mb
#每次上传总数据大小限制
spring.http.multipart.maxRequestSize=100Mb

方案2、配置代码放在springBoot启动类里,即启动时初始化此对象的配置

 /**
     * 文件上传配置
     * @return
     */
    @Bean
    public MultipartConfigElement multipartConfigElement() {
        MultipartConfigFactory factory = new MultipartConfigFactory();
        //  单个数据大小
        factory.setMaxFileSize("20MB"); // KB,MB
        /// 总上传数据大小
        factory.setMaxRequestSize("100MB");
        return factory.createMultipartConfig();
    }

两种方案任选其一,均可解决线上问题。

这个错误通常是由于在处理文件上传时缺少 multipart boundary 导致的。Multipart boundary 是用于将请求中的不同部分(包括文件和其他数据)分隔开的标识。如果请求中没有正确设置 multipart boundary,服务器就无法正确解析请求。 要解决这个问题,你需要确保在发送文件上传请求时正确设置了 multipart boundary。具体而言,你需要在请求的 Content-Type 头部中设置 multipart/form-data,提供一个正确的 boundary 值。boundary 值通常是一个随机生成的字符串,作为 multipart 数据的分隔符。 如果你使用的是 Apache HttpClient 进行文件上传,可以使用 MultipartEntityBuilder 类来构建请求实体,并自动生成合适的 multipart boundary。以下是一个示例代码: ```java MultipartEntityBuilder builder = MultipartEntityBuilder.create(); builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE); // 添加文件参数 File file = new File("path/to/file"); builder.addBinaryBody("file", file); HttpEntity entity = builder.build(); HttpPost request = new HttpPost("upload/url"); request.setEntity(entity); HttpResponse response = httpClient.execute(request); ``` 请注意,上述示例中的 "upload/url" 是你实际上传文件的目标 URL。确保根据你的需求进行相应的修改。 如果你使用其他的 HTTP 客户端库进行文件上传,请参考相关文档以了解如何正确设置 multipart boundary。 希望以上信息对你有所帮助!如果还有其他问题,请随时提问。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

寅灯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值