#jquery #upload #html #javascript
Имеем элемент формы, который позволяет пользователю "зачерпнуть" файлы оптом, а не кликать по одному. Подразумевается, что файлы сразу же отправляются на сервер, как только они выбраны (ибо особого смысла не вижу формировать список, а потом ещё раз сабмитить) Однако, если мы хотим ограничить пользователя, например, порцией в 10 файлов (допустим, чтобы не перегружать сервер, или если, скажем, у нас на сайте политика 10 файлов в одни руки), то здесь нас ждёт небольшое разочарование. Или большое. В HTML5 такая возможность не реализована (или я о ней не знаю). Мы можем указать минимальное количество файлов (то есть - один минимум), а вот максимальное увы. Получить количество файлов не сложно. Но что потом с этим делать? var collect = document.getElementById('input').files; //или var collect = $("input").files; // вернет объект FileList : { 0, 1, 2, length: 3, item } Варианты: выдать сообщение пользователю, что он превысил лимит порции и прервать загрузку; загрузить допустимую порцию и выдать сообщение, что загружена только часть файлов; создать остаток "на потом"; создать общий список, предложив пользователю сформировать порцию; Кроме этих терзаний мы имеем чисто технический вопрос: как "порезать" массив files? Метод splice() он не понимает. delete collect.item(i) или delete collect[i] на него не действует, в null он превращаться не хочет. Создать ещё один инпут (или серию) и "перекачать" в него лимитированное количество файлов мне тоже не удалось. То есть, остаётся один вариант: грубо оборвать загрузку, вынудив пользователя заново собирать коллекцию.
Ответы
Ответ 1
Посмотрите на JQuery File Upload, там эта проблема как-то решена. Правда, там расширяемость ужасная (мне, к примеру, пришлось половину кода переписать просто чтобы "подружить" с требованиями проекта) - но изучение их реализации точно не повредит.Ответ 2
Просто сделайте чтобы каждый раз при добавлении файла в форме, появлялся новый input, допустим до 10 раз так будет появлятся, после этого выдаётся alert('Максимальное количество файлов 10'), если-же multiple, так-же в jquery проверяем length и если больше 10 делаем e.preventDefault(); с сообщением о том что слишком много файловОтвет 3
Подписываемся на событие change и проверяем длину коллекции. Если не устраивает, блокируем отправку формы. Ну либо отправляем файлы ajax'ом - тогда и количество контролировать можем.
Комментариев нет:
Отправить комментарий