Grails4 - 上传文件超过时捕获文件 maxFileSize 限制

Grails4 - catching file maxFileSize limit when exceeded on uploading a file

我想捕获这个异常,而不是简单地 return 给最终用户一个 500,这是一种糟糕的体验,至少在我的应用程序中是这样。 目的是 return 用户返回表单页面并提供一些反馈,以便他们重试。

目前的经验是丢给用户一个500,然后打印到日志中;

Caused by: org.apache.tomcat.util.http.fileupload.FileUploadBase$SizeLimitExceededException: the request was rejected because its size (157552) exceeds the configured maximum (1024)

感谢@james-kleeh this 领先;

但是当我扩展默认使用的 StandardServletMultipartResolver 实现时,我只能在 Grails 4.0.0.M2 上运行它。然后继续从配置(yaml)中解决 maxFileSize 限制。

public class MyMultipartResolver extends StandardServletMultipartResolver {

    static final String FILE_SIZE_EXCEEDED_ERROR = "fileSizeExceeded"

    public MultipartHttpServletRequest resolveMultipart(HttpServletRequest request) {
        try {
            return super.resolveMultipart(request)
        } catch (MaxUploadSizeExceededException e) {
            request.setAttribute(FILE_SIZE_EXCEEDED_ERROR, true)
            return new DefaultMultipartHttpServletRequest(request, new LinkedMultiValueMap<String, MultipartFile>(), new LinkedHashMap<String, String[]>(), new LinkedHashMap<String, String>());
        }
    }
}

在resources.groovy中有以下内容;

// catch exception when max file size is exceeded
multipartResolver(MyMultipartResolver)

您随后需要检查控制器中的 FILE_SIZE_EXCEEDED_ERROR 属性并进行相应处理。