Как предотвратить загрузку файла в память полностью при проверке его размера с помощью CommonsMultipartFile?(Ява, весна) - PullRequest
1 голос
/ 17 февраля 2011

У меня есть объект формы, который автоматически автоматически заполняется Spring.В этом объекте формы у меня есть поле:

CommonsMultipartFile file;

Пользователь может загрузить файл, и объект формы содержит файл должным образом.Все хорошо.Однако я хочу убедиться, что пользователь не может загружать файлы размером более 2 МБ.Я сделал проверку, и это тоже работает.

Проблема: Когда я загружаю очень большой файл (скажем, 500 МБ), я получаю такой большой файл в памяти в моем объекте формы (я так предполагаю).Есть ли способ предотвратить это?Например, есть ли способ проверить размер файла с помощью валидатора, но без необходимости загружать весь файл перед проверкой?

Ответы [ 2 ]

1 голос
/ 17 февраля 2011

Предполагая, что вы используете CommonsMultipartResolver, вы можете использовать его свойство maxUploadSize, чтобы ограничить это.См. документы для примера.

0 голосов
/ 29 января 2013

Чтобы поймать это исключение MaxUploadSizeExceededException, я использую следующее:

В контроллере вы должны реализовать интерфейс HandlerExceptionResolver.

Затем реализовать метод resolException:

// Catch file too big exception
@Override
public ModelAndView resolveException(HttpServletRequest request,
        HttpServletResponse response, Object handler, Exception exception) {
    if (exception instanceof MaxUploadSizeExceededException) {
        // Do something with exception here
    }       

    // Goes back to original view here
    Map<String, Object> model = new HashMap<String, Object>();
    model.put("uploadFile", new UploadFile());
    return new ModelAndView(associatedView,model);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...