Как ограничить размер файла, загружаемого с помощью JavaScript (или Java), без передачи всего файла? - PullRequest
11 голосов
/ 01 октября 2008

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

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

Спасибо!

Ответы [ 3 ]

4 голосов
/ 01 октября 2008

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

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

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

2 голосов
/ 01 октября 2008

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

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

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

1 голос
/ 01 октября 2008

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

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

...