Как ограничить размер загружаемого файла в Wicket? - PullRequest
4 голосов
/ 19 ноября 2009

Как ограничить размер файла при загрузке в Apache Wicket версия 1.4?

Я использую FileUploadField для обработки загрузки с обычной формой отправки без каких-либо Ajax вещей. Достаточно ли использовать Form.setMaxSize () , чтобы ограничить размер загружаемого файла?

Если загружен слишком большой файл, браузер загрузит весь файл, а Wicket создаст сообщение об ошибке проверки с ключом [form-id].uploadTooLarge.

Но как Wicket внутренне обрабатывает эту ситуацию, создавая временные файлы и т. Д.?

Я бы хотел предотвратить случай, когда пользователь загружает файл размером в несколько ГБ, который не помещается в память или диск, пока Wicket обрабатывает запрос.

Ответы [ 3 ]

4 голосов
/ 04 декабря 2009

Я немного покопался в калитке svn и обнаружил, что файл фактически записывается на диск FileUploadBase.parseRequest (RequestContext ctx) . Этот класс проверяет размер файла перед записью любого из них на диск.

Проверка размера файла в конечном итоге использует javax.servlet.ServletRequest.getContentLength () для определения размера файла, что означает, что фактическая реализация зависит от того, какой контейнер сервлета вы используете; но я бы сказал, что можно с уверенностью предположить, что любой, кто написал реализацию сервлета, знал достаточно, чтобы получить размер файла из заголовка вместо того, чтобы записать все это на диск и затем проверить его размер. Таким образом, вам не нужно беспокоиться о людях, пытающихся загружать огромные файлы, занимая все ваше дисковое пространство.

4 голосов
/ 30 ноября 2009

Документация в Форме гласит:

В случае ошибки загрузки два ключи ресурса доступны для указания сообщения об ошибках: uploadTooLarge и uploadFailed т.е. в [page] .properties [form-id] .uploadTooLarge = У вас есть загрузил файл, который находится над допустимый предел 2Mb

Я предполагаю, что те, кого уволят в форме, отправляют подтверждение .. Вы пытались узнать, так ли это?

3 голосов
/ 24 февраля 2011
form.setMaxSize(Bytes.kilobytes(fileUploadMaximumKilobytes));
...