Как работает Drag-and-Drop — загрузка файлов простым перетаскиванием на страницу
easy

Как работает Drag-and-Drop — загрузка файлов простым перетаскиванием на страницу

Из чего состоит и как работает форма

Давным-давно, до 2008 года, чтобы загрузить что-то в интернет, нужно было нажимать кнопку «Обзор» и выбирать файл из списка доступных. С выходом HTML5 это изменилось: в веб пришла технология Drag-and-Drop. Сегодня рассказываем о ней.

Что такое Drag-and-Drop

Drag-and-Drop — технология управления элементами при помощи захвата, перетаскивания и бросания их в другое место:

Что такое Drag-and-Drop

Впервые такой способ управления появился в 1984 году в MacOS, а затем постепенно распространился повсюду. Теперь Drag-and-Drop работает в большинстве программ и приложений:

  • конструкторы сайтов, где элементы перетаскиваются из панели управления в рабочую область;
  • перемещение иконок на рабочем столе — например, в корзину;
  • расстановка виджетов на экране смартфона или планшета;
  • перетаскивание задач в таск-трекере;
  • загрузка файлов на сайт путём их перетаскивания в специальную форму и так далее.

Сегодня подробнее поговорим о последнем пункте. Когда сайт ждёт от пользователя какой-то файл, он показывает форму, куда просит перетащить данные для обработки. Вот как это выглядит, если сайт предлагает загрузить видеофайл для размещения на сервисе:

Что такое Drag-and-Drop

Как это устроено технически

Снаружи сайт состоит из страниц, а изнутри — из сервера и базы данных. Когда мы перемещаемся по сайту, то переходим на разные страницы. Если на сайте предусмотрена загрузка файлов через Drag-and-Drop, для её запуска откроется страница или окно с нужным содержимым. Эта страница и есть форма Drag-n-Drop.

Для работы формы нужны HTML-разметка, CSS-стили и код JS.

HTML-разметка объясняет браузеру структуру страницы и как именно её отобразить. Для формы Drag-and-Drop используются подсказки о допустимых форматах файлов, кнопки добавления и отправки файлов, полоса процесса загрузки.

CSS-стили нужны для визуального отображения. Вся красота прописывается здесь: цвет формы и кнопок, цвет фона страницы, скруглённые углы рамки, тень и градиенты, настройки шрифта.

Код JavaScript смотрит в код HTML, видит элементы и прописывает поведение для каждого. Например, в HTML есть зона для загрузки файлов, куда пользователь будет их перетаскивать. JavaScript берёт эту зону и меняет цвет, когда мы проносим над ней файл. 

А ещё именно в скрипте JS объясняется, куда и каким образом отправить файлы. Обычно загрузка происходит прямо из формы без перезагрузки страницы. За это отвечает технология XMLHttpRequest, которая обновляет только часть веб-страницы.

HTML и CSS отвечают за внешний вид формы, а JavaScript — за её поведение и отправку перемещённых файлов на сервер
HTML и CSS отвечают за внешний вид формы, а JavaScript — за её поведение и отправку перемещённых файлов на сервер

Что нужно для загрузки через Drag-and-Drop

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

  • Клиент — браузер или другое приложение, которое мы используем для работы в интернете. Это наружная часть.
  • Сервер — компьютер, на котором хранится программа, которую видят пользователи. На сервере обрабатываются файлы и запросы от пользователей, регулируется нагрузка, настраивается общая логика работы.
  • База данных — ещё одна программа, в которой хранятся все данные приложения. Для безопасности она хранится отдельно от основной программы. Пользователи обращаются к базе данных через сервер, который может разрешить или не разрешить выдать информацию.

Если сделать форму Drag-n-Drop без серверной части, её будет видно в браузере, но отправлять файлы она не сможет. 

Видимая нам часть сайта общается с сервером, а сервер — с базой данных
Видимая нам часть сайта общается с сервером, а сервер — с базой данных

Куда отправляются файлы после загрузки

Форма отправляет файлы из фронтенда на бэкенд: из браузера они идут по адресу, который прописан в JavaScript. 

Сервер отвечает за главную часть всего процесса — что нужно пользователю? Зачем он положил свои файлы в форму? Он хочет склеить PDF-файл, выложить видеоролик в открытый доступ, обработать фотографию с помощью нейросети? В зависимости от логики на сервере он обрабатывает загруженные файлы и получает результат, который нужно показать пользователю.

Когда бэкенд-сервер выполнил свою задачу, происходит обратный процесс. Он посылает ответ на фронтенд, и браузер отдаёт пользователю то, ради чего всё происходило. Это может быть загруженное в канал видео или готовая к скачиванию презентация. А может быть просто уведомление, что файлы загружены и можно продолжать — например, когда мы добавляем сканы документов в бухгалтерский сервис.

Где полезен и где не работает Drag-and-Drop

Загрузка с помощью Drag-n-Drop полезна, когда выполняются два условия: нам нужны от пользователя какие-то файлы и есть возможность использовать два окна на одном экране.

В любом сервисе, который не принимает файлы, не нужна и форма для их загрузки. Например, в приложении магазина люди просто кладут товары в корзину, а затем оплачивают их. Ничего не нужно загружать, поэтому форму Drag-n-Drop делать незачем. 

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

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

Так можно отправить любой файл?

С помощью формы Drag-and-Drop можно загрузить любой файл, который разрешён самой формой. Можно ограничить размер, количество файлов, их тип. Например, на видеохостинг нельзя загрузить аудиофайл, а на фотосток — архив.

Ограничения чаще всего указаны в самой форме так, чтобы их было видно:

Форма сообщает, что можно загрузить файлы формата .jpg или .mp4 размером не более 200 Мб
Форма сообщает, что можно загрузить файлы формата .jpg или .mp4 размером не более 200 Мб

Насколько это безопасно

Получается, что пользователь может загрузить любой файл, даже вредоносный скрипт. Поэтому разработчики при работе над формой Drag-and-Drop часто предусматривают проверку файлов с помощью онлайн-антивирусов.

Если вы отправляете файлы и боитесь, что их могут украсть, — не отправляйте их. А ещё поставьте надёжный пароль на роутер и не пользуйтесь публичным Wi-Fi.

Что дальше

В следующий раз расскажем, как сделать форму Drag-and-Drop у себя на сайте. Подпишитесь, чтобы не пропустить :-)

А пока расскажите в комментариях, как вам удобнее — загружать файлы перетаскиванием или нажимать на кнопку и выбирать нужный файл вручную?

Текст:

Игорь Росляков

Редактор:

Инна Долога

Обложка:

Алексей Сухов

Корректор:

Ирина Михеева

Вёрстка:

Абдурахман Гаджиев

Соцсети:

Юлия Зубарева

Вы фронтендер? Гляньте сюда ↓
У нас есть курсы по прокачке навыков до уровня middle и далее. Начать можно бесплатно. Посмотрите, интересно ли вам это.
Начать бесплатно
Вы фронтендер? Гляньте сюда ↓ Вы фронтендер? Гляньте сюда ↓ Вы фронтендер? Гляньте сюда ↓ Вы фронтендер? Гляньте сюда ↓
Получите ИТ-профессию
В «Яндекс Практикуме» можно стать разработчиком, тестировщиком, аналитиком и менеджером цифровых продуктов. Первая часть обучения всегда бесплатная, чтобы попробовать и найти то, что вам по душе. Дальше — программы трудоустройства.
Начать карьеру в ИТ
Получите ИТ-профессию Получите ИТ-профессию Получите ИТ-профессию Получите ИТ-профессию
Еще по теме
easy