You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot超大文件上传出现ERR_CONNECTION_RESET问题求助

Spring Boot 文件上传超大文件时浏览器/Axios报ERR_CONNECTION_RESET问题解决

问题原因

  1. Tomcat默认异常处理逻辑:当请求体大小超出配置上限时,Tomcat会在请求解析阶段抛出SizeLimitExceededException,此时请求还未进入Spring的DispatcherServlet处理流程,Tomcat默认会直接关闭TCP连接,导致浏览器/Axios收到ERR_CONNECTION_RESET错误。
  2. 客户端处理差异:Postman对连接断开的处理逻辑与浏览器/Axios不同,它能识别服务器的拒绝响应并展示错误信息,而浏览器/Axios直接判定为连接重置。
  3. 公司项目正常的原因:该项目大概率已经配置了Tomcat请求体吞入参数,或自定义了文件上传异常拦截逻辑,将异常处理转移到Spring层面,返回标准HTTP响应,避免了Tomcat直接断开连接。

解决方案

方案1:调整Tomcat参数,避免直接断开连接

在application.properties或application.yml中添加配置,让Tomcat在拒绝请求时正常完成响应:

# 设置Tomcat允许吞入的请求体大小为无限制(-1),避免因剩余请求体未处理导致连接断开
server.tomcat.max-swallow-size=-1
# 可选:延长连接超时时间,防止大文件上传中途超时
server.tomcat.connection-timeout=60000

方案2:Spring层面拦截文件大小异常,返回标准响应

结合Spring文件上传配置和全局异常处理器,将异常处理转移到Spring层面:

  1. 配置Spring文件上传限制:
spring.servlet.multipart.max-file-size=10MB
spring.servlet.multipart.max-request-size=10MB
  1. 编写全局异常处理器捕获文件上传异常:
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.multipart.MultipartException;

@ControllerAdvice
public class FileUploadExceptionHandler {
    @ExceptionHandler(MultipartException.class)
    public ResponseEntity<String> handleFileUploadError(MultipartException e) {
        return new ResponseEntity<>("文件大小超出限制,最大允许10MB", HttpStatus.PAYLOAD_TOO_LARGE);
    }
}

方案3:替换MultipartResolver(可选)

改用CommonsMultipartResolver在Spring层面提前校验文件大小,避免Tomcat抛出异常:

  1. 引入Maven依赖:
<dependency>
    <groupId>commons-fileupload</groupId>
    <artifactId>commons-fileupload</artifactId>
    <version>1.4</version>
</dependency>
  1. 配置自定义MultipartResolver:
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.multipart.commons.CommonsMultipartResolver;

@Configuration
public class MultipartConfig {
    @Bean
    public CommonsMultipartResolver multipartResolver() {
        CommonsMultipartResolver resolver = new CommonsMultipartResolver();
        resolver.setMaxUploadSize(10 * 1024 * 1024); // 总请求体最大10MB
        resolver.setMaxUploadSizePerFile(10 * 1024 * 1024); // 单个文件最大10MB
        return resolver;
    }
}

内容的提问来源于stack exchange,提问作者shikai

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 00:04:03