Подтвердить что ты не робот

Как вы ограничиваете размер загружаемого файла с помощью JavaScript (или Java) без передачи всего файла?

Есть ли способ проверить на браузере на стороне клиента, зависит ли размер файла, загружаемого с JSP-страницы, к пределу заданного размера, не заставляя пользователя загружать весь файл только для того, чтобы узнать, что он слишком велик?

Я хотел бы держаться подальше от каких-либо проприетарных средств управления или методов, таких как Flash или ActiveX, если это возможно.

Спасибо!

4b9b3361

Ответ 1

Это не идеальное решение, но если вы проверите HTTP-заголовок Content-Length с помощью request.getHeader("Content-Length"), вы можете не передавать весь файл.

В качестве объяснения чрезвычайно большой файл не будет передан сразу. Вам нужно будет фактически открыть поток, представляющий этот кусок данных POST, и прочитать его для всего, что нужно передать.

С другой стороны, если вы беспокоитесь об атаках типа "отказ в обслуживании", вы не можете доверять заголовку Content-Length, потому что его можно легко подделать. В этом случае вы должны установить ограничение и передать передачу этого файла, останавливаясь, как только вы превысите этот предел.

Ответ 2

Предложите вам пересмотреть решение Flash и взглянуть на загрузчика YUI, здесь:

http://developer.yahoo.com/yui/uploader/

Помимо прочего, событие fileSelect будет указывать размер выбранного файла в байтах сразу после его выбора, но перед его загрузкой, поэтому вы сможете ограничить его.

Ответ 3

С JSP или PHP вы не сможете ограничить размер файла, потому что ваша страница не получит запрос до тех пор, пока загрузка не будет выполнена. В этот момент вы можете решить не сохранять файл, но это может быть слишком поздно.

Есть некоторые Java-решения, например. MyUploader или Гермес. Некоторые даже поддерживают несколько загрузок файлов и возобновляют частичную загрузку, а некоторые также дают исходный код. Вы также можете написать свой собственный, но он должен быть подписанным апплетом, чтобы функционировать, потому что ему нужно получить доступ к локальной файловой системе. Если вы используете Apache в качестве своего веб-сервера, вам потребуется достаточно оперативной памяти на вашем компьютере, чтобы соответствовать всему размеру файла в памяти всех файлов, загружаемых в данный момент времени.