Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > PECL uploadprogress


Автор: Ripper 25.5.2013, 17:50
Добрый день

Пытаюсь сделать индикатор загрузки с помощью pecl uploadprogress. Но не понимаю как отследить статус загрузки. Функция uploadprogress_get_info возвращает либо инфу о загружаемом файле, либо false, причем если false это может означать что загрузка еще не началась, либо закончилась, либо ошибка.

Я на jQuery отправляю аяксом post запрос, после чего начинается загрузка. Далее ставлю таймер который каждые сколько то миллисекунд отправляет запрос на сервер с целью получить сколько мы уже загрузили. Но эти две вещи - асинхронные, т.е. бывает так что загрузка файла еще не началась, а я уже чекаю на то, сколько загрузилось, и получаю false. А бывает так что загрузка завершилась, а запрос на проверку размера пришел после загрузки, и тоже false.

Ну собственно вот код (codeigniter):
Код

    public function progress() {
        if ($this->input->get('uid')) {
            $status = uploadprogress_get_info($this->input->get('uid'));
            if ($status) {
                $uploaded = round($status['bytes_uploaded']/$status['bytes_total']*100);
                $this->response->custom(array('in_progress' => true, 'progress' => $uploaded));
            } else {
                $this->response->custom(array('in_progress' => false));
            }
        } else {
            $this->response->error(BAD_INPUT_DATA);
        }
    }


Я находил пример где как-то с iframe-ом это делают, только еще дело в том, что, после загрузки файла у меня еще кое-какая логика выполняется, которая тоже занимает время. И мне нужно различать, когда непосредственно загрузился файл, а когда после этого закончилась логика. Ну например... загрузился файл и добавили запись в БД. Я хочу отобразить прогресс бар с загрузкой файла, а после того как файл загрузился, вывести надпись "Добавление в базу данных...", а после уже добавления написать что типа все ОК.  А в примере было onload iframe = uploading finished, но это не совсем так

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)