Grails4 - ограничение на максимальный размер файла при превышении при загрузке файла

Я хотел бы поймать это исключение, а не просто вернуть 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 ответ

Решение

Кредитование @james-kleeh для этого быстрого старта;

Но я мог заставить это работать на 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>());
        }
    }
}

Со следующим в ресурсах. Groovy;

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

Затем вам необходимо проверить атрибут FILE_SIZE_EXCEEDED_ERROR в контроллере и обработать его соответствующим образом.

Другие вопросы по тегам