| imho.ws |
![]() |
|
|
|
# 1 |
|
Newbie
Регистрация: 07.03.2006
Сообщения: 43
![]() |
Проблемы с загрузкой файлов
Нужно сделать так чтобы пользователь не мог закачать файл больше чем установлено различными настройками сервера, в частности php: upload_max_filesize, post_max_size.
Форма закачки имеет стандартный вид: Код:
<form enctype="multipart/form-data" action="_URL_" method="post"> <input type="hidden" name="MAX_FILE_SIZE" value="1000"> Send this file: <input name="userfile" type="file"> <input type="submit" value="Send File"> </form> Так вот, проблема в следующем: Если размер файла больше чем значение поля MAX_FILE_SIZE в хтмл форме, то сначала файл грузится на сервер, при этом появляется предупреждение: Код:
Warning: POST Content-Length of 8387342 bytes exceeds the limit of 5242880 bytes in Unknown on line 0 Я конечно понимаю что с точки зрения хттп протокола это правильно, но что? браузеры не смотрят чтоли значение этого поля? Можно ли как нибудь сделать так чтобы на стороне клиента проверялся размер файла? |
|
|
|
|
# 2 | |
|
::VIP::
Регистрация: 12.11.2002
Адрес: Nicosia, Cyprus
Сообщения: 1 285
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Цитата:
__________________
"If people only knew how hard I work to gain my mastery, it wouldn't seem so wonderful at all." Michelangelo Buonarroti Последний раз редактировалось Saruman; 07.08.2007 в 13:11. |
|
|
|
|
|
# 3 |
|
Newbie
Регистрация: 07.03.2006
Сообщения: 43
![]() |
Saruman, ты меня не понял. Мне нужно сделать так чтобы при закачке файла 100 мегабайт сообщение о том что лимит - 99, выскакивало до того как пользователь потратит кучу времени на его закачку!!! На серевере у меня все под контролем!!!!!!!
Последний раз редактировалось GoodS; 07.08.2007 в 15:45. |
|
|
|
|
# 4 |
|
::VIP::
Регистрация: 12.11.2002
Адрес: Nicosia, Cyprus
Сообщения: 1 285
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
ок, сформулирую по другому - нет кросс-браузерного способа на стороне клиента контролировать размер закачиваемого файла. Javascript не предоставляет подобных возможностей, это возможно посредством ActiveX - но, ессно, результат будет IE-only (пример кода), либо же делать на флеше файл-аплоадер.
Если же тебе нужно кросс-браузерное решение - то его можно реализовать только на стороне сервера. В частности, при обнаружении параметра MAX_FILE_SIZE пхп проверяет переданный объём POST-запроса (из хедера content-length) на предмет превышения этого параметра, и если запрос (=закачиваемый файл) больше - то СРАЗУ выдаёт ошибку, не дожидаясь закачки всего файла, что тебе и нужно, как я понял. Ессно, для этого поле с MAX_FILE_SIZE должно идти до тела закачиваемого файла.
__________________
"If people only knew how hard I work to gain my mastery, it wouldn't seem so wonderful at all." Michelangelo Buonarroti |
|
|
|
|
# 5 |
|
Newbie
Регистрация: 07.03.2006
Сообщения: 43
![]() |
Мне нужно чтобы закачка вообще не начиналась когда файл слишком большой...
И ошибку превишение Content-Length'ом лимита пхп почему то выдвет после того как закачает файл на сервер! Те насколько я понял нереально сделать так как я хочу? |
|
|
|
|
# 7 |
|
мод
IMHO Кодер-200(6,7,8) Регистрация: 29.03.2003
Адрес: Saint-Petersburg, Russia
Пол: Male
Сообщения: 2 734
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Кстати, я тоже какое-то время назад столкнулся с этим, и для меня было удивительно и не понятно такое положение дел.
Saruman, понятно что на сервере все проверяется уже реально, и не для проверок это хотелось бы сделать, чтобы защититься от тех пользователей, которые будут сами формировать POST-запросы, а именно и только для удобства самого пользователя - тоесть чтобы не заставлять его ждать (тратить трафик, деньги) загрузки файла, который я (мой сервер) в итоге не примет! Я понимаю что несекьюрно давать доступ к каким-либо операциям с файловой системой на JavaScript, или на запись в value <input type=file>, как это есть, все понимаю. Но почему нельзя тот же размер, вместе с именем файла, сделать для JavaScript доступным, для выбранного файла пользователя, вместе с его именем (не в Опере только. В ней мне так и не удалось получить имя, в остальных без проблем)? Кстати, на счёт варианта, для IE и FireFox можно сделать на JavaScript разные реализации проверки, но при этом для FF надо будет скрипт подписывать, а для IE это будет использовать встроенный для таких целей ActiveX элемент для доступа к файловой системе пользователя. И в том и в другом случае, пользователю будет выдано предупреждение и запрос на разрешение небезопасной операции.
__________________
Я делаю Линукс! Присоединяйтесь к свободным людям! Связаться со мной всегда можно по джабберу: Hubbitus@jabber.ru Pahan-Hubbitus. |
|
|