Grails 3大文件上传触发SizeLimitExceededException问题求助
解决Grails大文件上传SizeLimitExceededException问题
我之前在Grails项目里上传大文件时也踩过一模一样的坑!这个错误本质是请求体大小超过了Tomcat + Grails的双重限制,你之前的配置可能只覆盖了其中一边,或者配置的位置不对。下面分版本和场景给你梳理完整的解决方案:
一、先明确错误根源
Caused by: org.apache.tomcat.util.http.fileupload.FileUploadBase$SizeLimitExceededException: the request was rejected because its size (3553808) exceeds the configured maximum (128000)
这个报错说明当前请求的大小(约3.4MB)超过了Tomcat或Grails设置的128KB上限,需要同时调整两端的配置。
二、Grails 3.x/4.x/5.x 版本配置
修改项目根目录下的 application.yml,添加/调整以下配置:
# Grails 自身的上传大小限制 grails: web: maxUploadSize: 10485760 # 这里设置为10MB,单位是字节,按需调整 # Spring Multipart 配置(必须同步设置) spring: servlet: multipart: max-file-size: 10MB # 单个文件最大大小 max-request-size: 10MB # 整个请求体的最大大小 # 内嵌Tomcat的关键配置,避免请求被截断 server: tomcat: max-swallow-size: -1 # 设置为-1表示不限制Tomcat吞入的请求大小 connection-timeout: 60000 # 可选,大文件上传需要更长的超时时间,这里设为60秒
三、Grails 2.x 版本配置
修改 Config.groovy:
// 启用multipart上传 grails.web.disable.multipart=false // 设置Grails层面的最大上传大小(10MB) grails.web.maxUploadSize = 10485760
如果使用内嵌Tomcat,还要在 BuildConfig.groovy 中添加Tomcat参数:
grails.tomcat.config = { maxPostSize = 10485760 // 设置Tomcat允许的最大POST请求大小 }
四、外部Tomcat部署场景
如果你的Grails项目部署在独立的Tomcat服务器上,还需要修改Tomcat的 conf/server.xml 文件,找到Connector节点添加maxPostSize参数:
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" maxPostSize="10485760" /> <!-- 单位字节,10MB;Tomcat8.5+版本设为-1表示不限制 -->
注意:Tomcat 8.5之前的版本,maxPostSize=0表示不限制,8.5及以后版本用-1,别搞混了!
五、容易忽略的坑
- 必须重启应用:所有配置修改后,一定要重启Grails应用或Tomcat,否则配置不会生效!
- 反向代理限制:如果前端通过Nginx等反向代理访问,还要在Nginx配置中添加
client_max_body_size:client_max_body_size 10M; # 和后端配置保持一致 - 安全框架拦截:如果项目用了Spring Security等安全框架,检查有没有额外的请求大小限制配置。
按照上面的步骤逐一排查配置,应该就能解决大文件上传的限制问题了!
内容的提问来源于stack exchange,提问作者IgniteCoders
相关产品推荐
相关产品推荐

