ПРИХОДИТЕ УЧИТЬСЯ НОВОЙ ПРОФЕССИИ ЛЕТОМ СО СКИДКОЙ ДО 70%Забронировать скидку

Получение имени файла из input type=file: подробное руководство

Пройдите тест, узнайте какой профессии подходите и получите бесплатную карьерную консультацию
В конце подарим скидку до 55% на обучение
Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Чтобы получить название файла, выбранного через <input type="file">, достаточно назначить обработчик события 'change' и обратиться к свойству name первого файла в списке files элемента ввода. Вот пример кода:

JS
Скопировать код
document.querySelector('input[type="file"]').addEventListener('change', function() {
  console.log("Выбранный файл:", this.files[0].name);
});

Следует поместить этот скрипт сразу после HTML-элемента input:

HTML
Скопировать код
<input type="file" />

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

Пройдите тест и узнайте подходит ли вам сфера IT
Пройти тест

Подробное объяснение

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

Работа со свойствами файла и обработка выбора нескольких файлов

Получение дополнительных свойств

Помимо названия файла, вы можете получить и другие данные, например, тип и размер файла, используя File API:

JS
Скопировать код
document.getElementById('fileInput').addEventListener('change', function() {
  if (this.files.length === 0) {
    console.log('Файл не выбран. Возможно, время для перерыва и кофе ☕️.');
  } else {
    const file = this.files[0];
    console.log("Выбранный файл:", file.name);
    console.log("Тип файла:", file.type);
    console.log("Размер файла:", file.size, "байт");
  }
});

Проверка на отсутствие выбранного файла поможет адеkvатно обрабатывать эту ситуацию без возникновения ошибок.

Обработка выбора нескольких файлов

Если у <input> присутствует атрибут multiple, файлы можно обработать следующим образом:

JS
Скопировать код
document.getElementById('multiFileInput').addEventListener('change', function() {
  for(let i = 0; i < this.files.length; i++) {
    const file = this.files[i];
    console.log(`Файл ${i + 1}:`, file.name);
  }
});

Взаимодействие с пользователем и организация кроссбраузерности

Дружественные уведомления для пользователя

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

JS
Скопировать код
function formatBytes(bytes, decimals = 2) {
  if (bytes === 0) return '0 Байт';
  const k = 1024;
  const dm = decimals < 0 ? 0 : decimals;
  const sizes = ['Байт', 'КБ', 'МБ', 'ГБ', 'ТБ', 'ПБ', 'ЭБ', 'ЗБ', 'ИБ'];
  const i = Math.floor(Math.log(bytes) / Math.log(k));
  return parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + ' ' + sizes[i];
}

Теперь размер файла отображается так, что он становится понятен любому пользователю.

Обеспечение совместимости

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

Визуализация

Давайте проиллюстрируем это всё при помощи аналогии с открытым микрофоном:

Markdown
Скопировать код
🎤 – Никого нет (файл не выбран)
🎤 – Ожидаем участников…
🎤 – У нас кто-то присоединяется! (файл выбран)

После выбора файла у нас есть:

JS
Скопировать код
document.getElementById('fileInput').onchange = function() {
    console.log("На сцене: " + this.files[0].name);
};

И затем объявляется имя файла:

Markdown
Скопировать код
🔊 **Имя файла:** "awesome_track.mp3"

Примечание: Не забудьте заменить 'fileInput' на ID вашего input-элемента.

Бонус

Уникальная обработка ID

Для каждого <input type="file"> на странице стоит использовать уникальный id, чтобы корректно отрабатывать каждый начальный элемент.

Использование jQuery

JS
Скопировать код
$('.fileUploader').on('change', function() {
  alert("Выбранный файл: " + this.files[0].name);
});

jQuery можно использовать для более простой и элегантной подписки на события.

Проверка пользовательского ввода

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

Полезные материалы

  1. Использование файлов в веб-приложениях – Веб-API | MDN — Руководство по работе с файлами в веб-приложениях.
  2. Файлы и FileReader — Учебник, детально рассказывающий о работе с файлами на JavaScript.
  3. Чтение файлов в JavaScript с использованием file and FileReader API | web.dev — Статья о чтении файлов в JavaScript с использованием современных API.
  4. HTML-стандарт — Официальный стандарт, касающийся полей ввода для загрузки файлов.
  5. Событие change HTMLElement – Веб-API | MDN — Подробное описание события изменения, которое играет ключевую роль в отслеживании выбора файлов.