Загрузка файлов на сервер путем перетаскивания. Часть 2

Загрузка файлов на сервер путем перетаскивания

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

скачать исходникискачать урок

Начало загрузки файла

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

Обратите внимание, что для выбранной области приема файлов мы отслеживаем встроенные события виджета Uploads:

start.upload – начало работы виджета (файлы перемещены в область приема);

filestart.upload – загрузка файла (если перемещено несколько файлов одновременно, данное событие будет срабатывать для каждого файла);

fileprogress.upload – загрузка файла и возвращение прогресса загрузки (если перемещено несколько файлов одновременно, данное событие будет срабатывать для каждого файла);

filecomplete.upload – загрузка файла завершена;

fileerror.upload – ошибка загрузки файла;

complete.upload – окончание работы виджета (все файлы загружены).

События срабатывают при выполнении определенных условий и для каждого события мы опишем функцию обработчик, которая выполнит определенные манипуляции с данными. Итак, начало загрузки файлов – сработает событие start.upload, а значит функция Start(). Код которой приведен ниже:

Функция принимает два параметра: e – объект блока приемника, и files – массив загружаемых файлов. В данной функции можно выполнить предварительные действия перед началом загрузки файлов. К примеру, проверить размер файла, возможно, его имя, формат и т.д. В нашем случае мы будем создавать под каждый файл в блоке с идентификатором res (это пустой блок для отображения результатов), отдельный блок li, где будет отображаться его имя. Доступ к каждому файлу осуществляется, обращением к каждой ячейке массива files.

Ячейка index – содержит индекс (номер) загружаемого файла, особенно это актуально, если загружается несколько файлов одновременно. Ячейка name – содержит имя загружаемого файла.

Загрузка файла

Как только, начинается непосредственная загрузка файла на сервер, выполняется функция fileStart():

Второй параметр функции – это данные по загружаемому файлу, опять же его имя, индекс и т.д. В данной функции мы выполняем поиск соответствующего блока li (поиск осуществляем по индексу) и указываем начальное значение прогресса 0%.

Отображение прогресса загрузки файлов

Когда файл загружается на сервер срабатывает событие fileprogress.upload, а значит, выполняется функция fileProgress(), код которой описан ниже:

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

Окончание загрузки файла

Когда загрузка завершена, срабатывает событие filecomplete.upload, а вместе с ним выполняется функция filePComplelele(), код которой приведен выше:

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

Проверка ошибок и окончание загрузки файла

Как только все файлы были обработаны и загружены на сервер, срабатывает событие complete.upload, которое указывает на то, что работа виджета завершена, при этом выполнится функция Complete(). Для обработки ошибок в виджете Uploads, предусмотрено событие fileerror.upload, которое срабатывает, в случае возникновения различных ошибок, к примеру, если размер файла слишком большой, в этом случае загрузка фала выполнена не будет. Соответственно для данного события так же предусмотрена функция обработчик:

Теперь осталось только добавить правила CSS, для более красивого оформления скрипта:

Теперь давайте посмотрим, что у нас получилось. Итак, начало перемещения файла к блоку приемнику:

Загрузка файла слишком большого размера:

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

Всего Вам доброго и удачного кодирования!!!

Метки:

Похожие статьи:

Комментарии Вконтакте:

Комментарии (7)