Ошибка максимального размера Catch Spring MVC - PullRequest
5 голосов
/ 20 июля 2010

Я знаю, что трудно проверить размер файла на стороне клиента (в браузере) только с использованием только чистого JavaScript.

Теперь мой вопрос: есть ли на стороне сервера способ поймать исключение, подобное этому?

org.springframework.web.multipart.MaxUploadSizeExceededException: Maximum upload size of 2000000 bytes

Что происходит, так это то, что он не достигает моего метода записи @controller и просто выдает исключение, которое обнаруживается моим error.jsp.

Я думал о том, возможно ли это сделать весной аннотированным методом MVC?

@RequestMapping("/uploadFile.htm")
    public String uploadAttachment(
        HttpServletRequest request,
        @RequestParam(required = false, value = "attached-file") MultipartFile file,
        ModelMap model) throws Exception {

        if(checkfilesize(file)){
            //populate model
            //add error if appplicable
            //return same form again
        }
        //return success
    }       
}

Моя проблема в том, что она не достигает этой точки и просто выдает большое жирное исключение.

Несмотря на то, что error.jsp смог его перехватить, я думаю, что он очень удобен для пользователя, если я могу предупредить пользователя о превышении лимита для файла, который он собирается загрузить.

Кстати, это приложение Spring MVC 2.5. Это возможно?

Ответы [ 2 ]

4 голосов
/ 21 июля 2010

Это исключение выдается в DispatcherServlet.doDispatch(), поэтому вы должны быть в состоянии перехватить его, используя HandlerExceptionResolver , настроенный в вашем контексте .

3 голосов
/ 21 марта 2012

В качестве альтернативы, не указывайте maxUploadSize и проверьте в контроллере / валидаторе, превышает ли размер ваш лимит:

if (file.getSize() > 2000000) {
    result.rejectValue("file", "<your.message.key>");
}

Это проверяет размер рассматриваемого файла, а не файла плюс все остальные параметры запроса, как это делает maxUploadSize из CommonsMultipartResolver.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...