Grails4 - ограничение на максимальный размер файла при превышении при загрузке файла - PullRequest
0 голосов
/ 19 июня 2019

Я хотел бы поймать это исключение, а не просто возвращать 500 конечным пользователям, что плохо, по крайней мере, в моем приложении.Намерение состоит в том, чтобы вернуть пользователя обратно на страницу формы с некоторой обратной связью, чтобы он мог повторить попытку.

В настоящее время пользователь отбрасывает 500 обратно, а в журналах печатается следующее;

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

1 Ответ

1 голос
/ 19 июня 2019

Crediting @ james-kleeh для this head start;

Но я смог получить эту работу на Grails 4.0.0.M2 только тогда, когда расширил реализацию StandardServletMultipartResolver, что и являетсяиспользуется по умолчанию.Затем пределы maxFileSize продолжают разрешаться из config (yaml).

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 атрибут в контроллере и обрабатывать соответственно.

...