Spring Boot大文件上传报413 Request Entity Too Large问题排查
解决Spring Boot文件上传413 Request Entity Too Large错误
1. 补充缺失的Multipart请求大小配置
你当前仅配置了单个文件的最大体积,但未设置整个请求的总大小限制,这是大文件上传失败的核心原因。在application.properties中添加以下配置:
# 单个上传文件的最大大小 spring.servlet.multipart.max-file-size=50MB # 单次请求(含所有文件+请求参数)的总最大大小 spring.servlet.multipart.max-request-size=50MB
参数说明:
spring.servlet.multipart.max-file-size:限制单个文件的上传体积spring.servlet.multipart.max-request-size:限制单次请求的总数据量(多文件上传时,需大于等于所有文件大小之和)
2. 清理无效的Tomcat配置(Spring Boot 2.x+)
在Spring Boot 2.x及更高版本中,server.tomcat.max-post-size已被Spring的Multipart配置替代,手动设置该参数不会生效,可直接删除。server.tomcat.max-swallow-size用于处理Tomcat接收超限请求的行为,当前50MB的配置合理,可保留。
3. 检查反向代理的请求限制
如果应用部署在Nginx等反向代理之后,需同步调整代理服务器的请求大小限制:
- 若使用Nginx,在站点配置或
nginx.conf中添加:client_max_body_size 50M;
修改后重启Nginx服务。
4. 优化上传工具类的文件写入逻辑
你当前使用is.available()一次性读取文件到内存的方式,对大文件易引发内存溢出,建议改用更高效的流复制方式:
import org.springframework.stereotype.Component; import org.springframework.web.multipart.MultipartFile; import java.nio.file.Files; import java.nio.file.Paths; import java.nio.file.StandardCopyOption; @Component public class FileUploadHelper { // 类名遵循驼峰命名规范 public String uploadDir = "C:\\Users\\comma\\Desktop\\projects\\pgm\\src\\main\\resources\\static\\images"; public boolean uploadFile(MultipartFile file) { try { Files.copy(file.getInputStream(), Paths.get(uploadDir + "\\" + file.getOriginalFilename()), StandardCopyOption.REPLACE_EXISTING); return true; } catch(Exception e) { e.printStackTrace(); return false; } } }
5. 验证配置生效
修改配置后重启应用,再次尝试上传28MB文件。若仍报错,可通过已开启的logging.level.org.springframework.web=DEBUG日志,查看是否有关于Multipart大小限制的具体提示,定位限制来源。
内容的提问来源于stack exchange,提问作者Ayushman Tripathi
相关产品推荐
相关产品推荐

