Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Отловить ContentLenth

12K
10 октября 2011 года
ASoftware
87 / / 16.04.2009
Вопрос наверное из разряда нубских, а может и совсем нет..)
Задача в следующем:
Есть форма отправки файла. Необходимо узнать размер файла при начале загрузки (ДО загрузки не получается, вернее получается посредством JavaScript
var node = document.getElementById('file');
node.files[0].fileSize

Но валидный он не во всех браузерах..)

Поэтому идея такова: отловить ContentLenth в отправленном заголовке клиентом. Но как??
Как, если при сабмите файл грузится, и php не выполнится пока он не загрузится полностью?
Слышал что это можно сделать через Perl (CGI), но я его совершенно не знаю. Если да, можно ли пример? Буду ооочень благодарен, так как голову ломаю уже долго.

P.S. Варианты SWFUpload не предлагать :)
4
10 октября 2011 года
mike
3.7K / / 01.10.2002
Стандартным аплоадом - никак.

Я бы покапал в сторону FileReader и HTML5.

Как пример: http://www.codenet.ru/webmast/js/html5-ajax-partial-upload/

Но полностью кроссбраузерного решения тут нет.

Можно еще посмотреть Google Gears. В относительно старых браузерах может помочь.
271
10 октября 2011 года
MrXaK
721 / / 31.12.2002
У nginx есть nginx upload module, из которого можно в свой скрипт передать)) см. секцию upload_aggregate_form_field
369
10 октября 2011 года
Kesano
451 / / 09.10.2007
С помощью флэша некоторые организовывают мультизагрузку. Может можно через Флэш?
12K
11 октября 2011 года
ASoftware
87 / / 16.04.2009
Вопрос все еще открыт..
Потому что для всех браузеров не напишешь решения, тем более это геморно.. Как читают content length на сервере? Ведь при загрузке например на youtube есть прогресс-бар, как узнать сколько уже загружено я представляю, но для этого прогресс-бара надо ведь знать сколько 100%, т.е. размер файла. Как?
271
11 октября 2011 года
MrXaK
721 / / 31.12.2002
см выше, это зависит от сервера, который стоит)) nginx, например, при установленном upload module ловит и размеры файла и т. п., потом в скрипте это читается через $_REQUEST например, прогресс-бар можно организовать разными вариантами.. было и расширение для пхп, которое делает похожую штуку.. от браузера здесь ничего не зависит
12
11 октября 2011 года
alekciy
3.0K / / 13.12.2005
Цитата: Mr.Hacker
см выше, это зависит от сервера, который стоит)) nginx, например, при установленном upload module ловит и размеры файла и т. п., потом в скрипте это читается через $_REQUEST например, прогресс-бар можно организовать разными вариантами.. было и расширение для пхп, которое делает похожую штуку.. от браузера здесь ничего не зависит


А ничего, что nginx отдаст файл на бэкэнд уже после полной загрузки файла (т.е. когда прогресс-бар не актуален)?

12
11 октября 2011 года
alekciy
3.0K / / 13.12.2005
Цитата: ASoftware
Вопрос все еще открыт..
Потому что для всех браузеров не напишешь решения, тем более это геморно.. Как читают content length на сервере? Ведь при загрузке например на youtube есть прогресс-бар, как узнать сколько уже загружено я представляю, но для этого прогресс-бара надо ведь знать сколько 100%, т.е. размер файла. Как?


Кроссбраузерно только флеш. Соответственно на клиенте требуется лишь его поддержка.

12
11 октября 2011 года
alekciy
3.0K / / 13.12.2005
Цитата: ASoftware
Вопрос все еще открыт..
Потому что для всех браузеров не напишешь решения, тем более это геморно.. Как читают content length на сервере? Ведь при загрузке например на youtube есть прогресс-бар, как узнать сколько уже загружено я представляю, но для этого прогресс-бара надо ведь знать сколько 100%, т.е. размер файла. Как?



Вообще замечу следующее. Нормальный браузер при upload шлет заголовок Content-Length, соотвественно веб сервер еще до того, как получит все тело запроса может узнать размер файла. Но браузер может его и не посылать, что HTTP спецехой разрешается делать (как разруливать ситуацию описано в п. 4.4 спецухи), но в этом случае ни о каком прогресс-баре речи идти не может.

Если исходить из того, что клиент данные о длине отправляет, то вопрос больше в серверных мехазмах. Поэтому рекомендую посмотреть в сторону HttpUploadProgressModule. Он хоть и не в ходит в официальную поставку, однако же работает.

271
12 октября 2011 года
MrXaK
721 / / 31.12.2002
Цитата: alekciy
А ничего, что nginx отдаст файл на бэкэнд уже после полной загрузки файла (т.е. когда прогресс-бар не актуален)?



ОК, есть ещё NginxHttpUploadProgressModule, который самим сервером без передачи к бэкенду отдаёт ответ (в виде XMLа)..

есть ещё silverlight и статья на тему

12
13 октября 2011 года
alekciy
3.0K / / 13.12.2005
Цитата: Mr.Hacker
ОК, есть ещё NginxHttpUploadProgressModule


Ну ссылку на этот модуль я привел постом выше ;) причем на официальную страницу.

В общем в целом я к тому, что без клиентской стороны тут не обойтись, минимум JS.

271
13 октября 2011 года
MrXaK
721 / / 31.12.2002
Да, точно)) просто вы nginx не написали у него в начале, по ссылке я не ходил и подумал, что это другой модуль)))
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог