Написал заготовку для загрузки файлов (html5, drag-n-drop, multimple)
Директивы:
-
ngFileSelect - вешается на <input type="file" />
-
ngFileDrop - вешается на DOM элемент, кот. будет ловить файлы (как правило, это весь документ)
-
ngFileOver - вешается на элемент, кот. будет реагировать (добавляться класс), когда файлы находятся над drop элементом. По умолчанию добавляется класс "ng-file-over". Другой класс можно задать в параметре атрибута ng-file-over="className"
Сервисы:
-
$fileStorage - файловое хранилище. Туда добавляются файлы, после того, как они были "сброшены и пойманы", либо выбраны в инпуте. Есть возможность фильтровать добавление в хранилище.
-
$fileUploader - загрузчик файлов. Помещает файлы в очередь, после чего загружает их оттуда.
-
$fileTransport - транспорт. Планирую xhr2 + iframe. На данный момент реализовано только первое.
$fileStorage
свойства:
-
files - массив файлов
методы:
-
add - добавить в хранилище
-
remove - удалить по индексу
-
removeAll - удалить все
коллбеки:
-
filter: function( file ) { - вызывается до добавления файла в хранилище. true - добавить, false - нет
-
onAfterAddingFiles - вызывается после добавления файлов в хранилище. На этом этапе можно читать файлы, делать превьюшки и т.п.
$fileUploader
свойства:
-
url: общий для всех файлов. Можно индивидуализировать для каждого файла, после добавления файла в хранилище
-
alias - псевдоним, под которым сервер увидит файл. Общий для всех файлов. Можно индивидуализировать для каждого файла, после добавления файла в хранилище
-
queue - очередь файлов
методы:
-
addToQueue - добавляет файлы в очередь загрузки
-
removeFromQueue - удаляет файл из очереди по индексу
-
clearQueue - очищает очередь
-
uploadItem - загружает файл по индексу
-
uploadAll - загружает все файлы в очереди
коллбеки:
-
progress - индикация загрузки файла
-
success - успешная загрузка
-
error - ошибка при загрузке
-
complete - загрузка завершена
Надо подумать над тем, что должно приходить в качестве параметров в эти функции. На данный момент только xhr.
В случае выбора >1 файла, файлы будут загружаться по очереди.
http://learn.javascript.ru/play/IhSxR
p.s.: кроме хрома нигде не проверял