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 属性并进行相应处理。
我想捕获这个异常,而不是简单地 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 属性并进行相应处理。