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

StackOverflow https://stackoverflow.com/questions/158149

Вопрос

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

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

Спасибо!

Это было полезно?

Решение

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

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

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

Другие советы

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top