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

Grails 4上传大文件触发SizeLimitExceededException问题求助

解决Grails 4文件上传SizeLimitExceededException的问题

我来帮你搞定这个文件上传大小限制的问题!你遇到的org.apache.tomcat.util.http.fileupload.impl.SizeLimitExceededException,大概率是因为几个容易忽略的配置点没覆盖到,咱们一步步来排查:

1. 确认Grails配置的层级是否正确

首先检查你的application.yml里,上传配置是不是放在grails节点下面?很多人容易漏了这个层级,导致配置根本没生效。正确的结构应该是:

grails:
  controllers:
    defaultScope: singleton
    upload:
      maxFileSize: 26214400  # 25MB
      maxRequestSize: 26214400

2. 配置嵌入式Tomcat的全局限制

Grails 4默认用嵌入式Tomcat,它本身也有请求大小的限制,会优先于Grails的配置生效。你需要在application.yml里添加Tomcat的相关配置:

server:
  tomcat:
    max-http-form-post-size: 26214400  # 和maxRequestSize保持一致
    max-swallow-size: -1  # 禁用Tomcat自动截断大请求的行为,避免提前抛异常
    connection-timeout: 60000  # 可选,延长超时时间防止大文件上传超时

3. 确保自定义MultipartResolver被正确注册

你写了CustomMultipartResolver,但Grails默认不会自动使用它,得手动在grails-app/conf/spring/resources.groovy里注册这个Bean:

beans = {
    multipartResolver(CustomMultipartResolver) {
        maxUploadSize = 26214400  # 全局请求大小限制
        maxUploadSizePerFile = 26214400  # 单个文件大小限制
    }
}

这样Grails才会用你的自定义Resolver来处理文件上传,异常捕获逻辑才能生效。

4. 优化自定义Resolver的异常捕获逻辑

建议你把异常捕获更精准一些,只处理SizeLimitExceededException,避免误捕获其他Multipart异常:

import org.apache.tomcat.util.http.fileupload.impl.SizeLimitExceededException;

class CustomMultipartResolver extends StandardServletMultipartResolver {
  static final String FILE_SIZE_EXCEEDED_ERROR = "fileSizeExceeded";
  
  @Override
  MultipartHttpServletRequest resolveMultipart(HttpServletRequest request) throws MultipartException {
    try {
      return super.resolveMultipart(request);
    } catch (SizeLimitExceededException e) {
      log.error("文件大小超过限制:{}", e.getMessage())
      request.setAttribute(FILE_SIZE_EXCEEDED_ERROR, true);
      return new DefaultMultipartHttpServletRequest(request, new LinkedMultiValueMap<>(), new LinkedHashMap<>(), new LinkedHashMap<>());
    }
  }
}

5. 检查是否有前置过滤器拦截请求

如果你的项目里有安全过滤器(比如Spring Security)或者自定义过滤器,有些过滤器会在MultipartResolver之前就检查请求大小,这时候需要在过滤器配置里同步调整允许的最大请求大小。

按照上面的步骤调整后,重启项目再测试大文件上传,应该就能解决问题了!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 17:52:35