![]() |
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]() ![]() ![]() |
|
taral |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 230 Регистрация: 17.1.2008 Репутация: нет Всего: нет |
Всем доброго времени суток!
До недавнего времени я был увене что узнать процент загрузки файла на сервер средствами javaScript-ajax-PHP невозможно. Думал я так пока не увидел FancyUpload (http://digitarald.de/project/fancyupload/) Меня очень заинтересовал механизм работы скрипта. Каким образом можно узнавать процент загрузки файла. Отправлять файл без перезагрузки страницы нельзя же. Хотя не совсем. Видел я библиотеку Котерова JsHttpRequest (http://dklab.ru/lib/JsHttpRequest/) Которая загружала так файл. Еще кажется в jQuery есть такая возможность. Кстати каким образом они это делают? Ведь пртокол http не позволяет держать постоянную связь с сервером ![]() Спасибо за внимание. Надеюсь на ответы=) |
|||
|
||||
theworldcreator |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 362 Регистрация: 25.8.2007 Где: Москва Репутация: 10 Всего: 13 |
Не знаю как это на самом деле реализуется(в смысле не "вызовите воот эту функцию", а как это реально работает на этой связке), но протокол TCP/IP, на котором работает подавляющее большинство серверов, позволяет узнать какая часть данных уже дошла до получателя.
А кто только что говорил об AJAX?
А вы считаете что у компьютера хватает оперативной памяти на хранение только одной страницы? Или почему вы тогда думаете что для отправки/получения данных нужно обязательно стереть кусочек данных формата HTML на вашем компьютере? |
||||||
|
|||||||
taral |
|
||||
Бывалый ![]() Профиль Группа: Участник Сообщений: 230 Регистрация: 17.1.2008 Репутация: нет Всего: нет |
С помощью AJAX отправлять файлы на сервер определенно нельзя. Давайте не будем играть в игру поймай меня за язык? Обычно отправка файла "без перезагрузки страницы" осуществляется с помощью фреймов. Потому там происходит обычная перезагрузка страницы. На коком принципе библиотека Котерова основана я не знаю. Возможно тоже с помощью фреймов.
Не совсем понял Вас. Я уверен что вы не думаете: пока страница открыта в браузере есть соединение с сервером. Потому могу сделать только один вывод. Я вам чем то не угодил и вы пытаетесь выловить из моего сообщения любые неувязочки что бы меня "опустить". P.S. Основой HTTP является технология «клиент-сервер», то есть предполагается существование потребителей (клиентов), которые инициируют соединение и посылают запрос, и поставщиков (серверов), которые ожидают соединения для получения запроса, производят необходимые действия и возвращают обратно сообщение с результатом. |
||||
|
|||||
theworldcreator |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 362 Регистрация: 25.8.2007 Где: Москва Репутация: 10 Всего: 13 |
То-ли вам не хватает каких то базовых знаний, то-ли мы недопонимаем друг друга по другой причине.
Вы когда нибудь рассматривали HTTP запрос/ответ(если рассматривали, дальше можете не читать)? Вначале заголовки - служебные данные в определенном формате, потом два символа перевода строки и данные которые интересуют принимающею сторону. Это может быть что угодно, можно сказать что компьютер формирует HTTP-валидный файл и отсылает его принимающей стороне. Когда вы скачиваете страницу она сохраняется где то на компьютере и выводится на экран. Браузеру все равно когда посылать запрос/принимать ответ, до, после или во время загрузки какой то определенной страницы(единственное ограничение - правила написанные разработчиком браузера, призванные обезопасить пользователя). Есть возможность через JavaScript попросить браузер сформировать запрос, как вы говорите, "без перезагрузки страницы", то-есть в произвольный момент времени по желанию разработчика сайта, а не пользователя, как это бывает обычно. МБ некий конкретный браузер и запрещает заполнение тела HTTP запроса посылаемого с подачи JavaScript нетекстовыми данными, но протокол HTTP не только это не запрещает, это часть его постоянной "работы". Я, конечно, могу и ошибаться, но всегда считал именно так и пара тестов, проведенных во время написания этого сообщения, мои знания подтверждают(хотя и не совсем однозначно) ![]() Если вам интересно напишите программку в пять строк которая будет подключаться через сокеты к удаленному серверу HTTP и выводить на экран ответ сервера и скачайте через нее что-нибудь, например mp3-файл. Или можно поставить плагин к браузеру позволяющий просматривать входящие/исходящие запросы. Если поставите заодно посмотрите что происходит когда вы файл на сервер отправляете через обычную форму. Советую попробовать отправить и текстовый и "двоичный"(в кавычках так как все они двоичные)). Это сообщение отредактировал(а) theworldcreator - 5.1.2009, 23:51 |
|||
|
||||
ksnk |
|
||||||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
Каким местом можно подключится к протоколу TCP, находясь в JavaScript машине на стороне клиента? при чем он тут вообще?
Цитата с Wiki
C помощью "динамического создания фреймов" передавать файлы можно, а Wiki утверждает, что это таки Ajax... Ajax - это вообще говоря способ открыть еще несколько страниц, показывая одну. Как это делается - фреймами, HtmlRequest'ом или еще как - не принципиально... -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
||||||
|
|||||||
solenko |
|
||||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1473 Регистрация: 15.1.2006 Где: Украина Репутация: 34 Всего: 67 |
taral, ответ на ваш вопрос находится в feature list все той же билиотеки
Добавлено через 3 минуты и 52 секунды
Попробуете найти браузер, который разрешает это сделать? Ну или хотя ьы добратся до контента файла выбранного пользователем в поле file? -------------------- Ла-ла-ла-ла Заметьте, нет официального подтверждения, что это не просто четыре слога. |
||||
|
|||||
theworldcreator |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 362 Регистрация: 25.8.2007 Где: Москва Репутация: 10 Всего: 13 |
Вопрос был "как это работает". Работает это именно через этот протокол. Да и потом вот полная фраза:
Средствами PHP проконтролировать точно можно, а используется он и там и там.
Поддерживаю. Только не "несколько страниц", ибо слово "страница" привязывает нас к чему то конкретному, ajax - способ открыть несколько TCP соединений прозрачно от пользователя, так точнее будет. |
||||||
|
|||||||
solenko |
|
||||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1473 Регистрация: 15.1.2006 Где: Украина Репутация: 34 Всего: 67 |
А о UDP и иже с ними будем рассуждать?
Подскажите способ для стандарной сборки php -------------------- Ла-ла-ла-ла Заметьте, нет официального подтверждения, что это не просто четыре слога. |
||||
|
|||||
theworldcreator |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 362 Регистрация: 25.8.2007 Где: Москва Репутация: 10 Всего: 13 |
Ну блин, простите, я вообще в JavaScript и что ему там позволяет браузер не особо сведущ, а то что гипотетически это возможно не нарушая стандартов JavaScript и HTTP я уверен. А браузер с такой функцией и самому написать можно ![]() |
|||
|
||||
theworldcreator |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 362 Регистрация: 25.8.2007 Где: Москва Репутация: 10 Всего: 13 |
Нет, UDP существует прозрачно от браузера, браузер видя просьбу JS послать запрос инициализирует именно TCP соединение.
Способ создать сокетов и контролирования их работы? Я уверен вы его знаете. А если вы про способ управлять сокетами создаваемыми сервером, то его разумеется не существует(в стандартной конфигурации). Но ведь мы говорим о мониторинге закачки файла средствами PHP, а не сервера, следовательно нас интересует именно создание сокетов PHP скриптом. |
||||
|
|||||
ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
PHP 5.2 с включенным extension'ом - uploadprogress. Это стандартная сборка или нет? Imho, нет, но вот вдруг... С ней можно заюзать функцию uploadprogress_get_info При некотором везении и зная место, куда складируются недозагруженные файлы, можно мониторить появление новых файлов в каталоге, почитывать их размер и докладывать клиенту. Можно просто повесить юзеру анимированый гиф с прогрессбаром и пусть он сам думает про нас что хочет... Может есть еще варианты? P.S. для себя я все больше склоняюсь к использованию флеш-загрузчика файлов в админке... Все-таки, возможность отметить каталог и загрузить его весь - на JS не эмулируется палюбому ![]() -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
|||
|
||||
taral |
|
||||||||||
Бывалый ![]() Профиль Группа: Участник Сообщений: 230 Регистрация: 17.1.2008 Репутация: нет Всего: нет |
Вот это я не знал. И когда говорил что
И я имел в виду XMLHttpRequest (поскольку считал что AJAX ограничевается этой технологией)
Мы определенно недопонимаем друг друга. Под фразой "http не позволяет держать постоянную связь с сервером" я имел в виду что в протоколе http обмен идёт по схеме запрос-ответ.
Если имели в виду узнать процент загрузки файла. То я был бы очень признателен если бы вы сообщили как это сделать. Ведь тогда можно осуществить загрузку файла с шкалой процента. Через фрейм отправляем файл на сервер. Потом через ajax периодически делаем запросы на сервер. Определяем с помощью PHP процент загруженного файла (я всегда думал что это невозможно, хотя и сейчас так думаю=) ) и возвращаем результат на клиент с процентом. Было бы здорово!
Моя оплошность. Эта библиотека и правда использует Flash. Я обычно проверяю флеш это или нет кликом правой кнопки на той области. А тут флеш работает как бы за кулисами=) |
||||||||||
|
|||||||||||
solenko |
|
||||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1473 Регистрация: 15.1.2006 Где: Украина Репутация: 34 Всего: 67 |
Вы не поверите, но в ECMA вообще нет ни слова ни о html ни о файлах. Так что да, его стандарты нарушить не получится ) а на
отвечать будете, или это тоже возможно только гипотетически? ) Добавлено через 4 минуты и 11 секунд В своей личной классификации я это отношу к мифическим методам ) Как узнать какой файл какой пользователь загружает?
Для меня -- идеальный вариант для большинства приложений. Если грузятся большие файлы, то есть смысл заморачиватся с флешовым. Ну а если нет, то вполне достаточно и этого Добавлено через 5 минут и 24 секунды А это довольно таки распространенный прием. Флешка делается невидимой и реализует то, чего не хватает js. Аудиоплееры, например, так делают -------------------- Ла-ла-ла-ла Заметьте, нет официального подтверждения, что это не просто четыре слога. |
||||
|
|||||
taral |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 230 Регистрация: 17.1.2008 Репутация: нет Всего: нет |
Я бы тоже начал использовать Flash. Но есть проблема. Я вообще не знаю как с ним работать. И никогда с ним не сталкивался при разработках. Я думаю что загрузка файла на сервер через Flash достаточно простая. Вы не знаете готовых Flash загрузчиков без интерфейса (как FancyUpload) что бы я смог использовать их при работе? Идеальным для меня вариантом был бы такой. Пользователь отправляет файл. Flash загрузчик периодически передает мне в js процент загрузки. Это сообщение отредактировал(а) taral - 6.1.2009, 00:47 |
|||
|
||||
ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
Я пока только склоняюсь
![]() ну а тот-же fancyupload уже чем-то не устраивает? Они все, imho, отличаются только внешним видом. Начинка у них примерно одинаковая. А у этого, в добавок еще и исходником можно разжиться... Это сообщение отредактировал(а) ksnk - 6.1.2009, 00:50 -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
|||
|
||||
![]() ![]() ![]() |
Правила форума "PHP" | |
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |