Чтение содержимого файла на клиенте в JavaScript
Быстрый ответ
Для эффективного чтения файлов на стороне клиента используйте API FileReader в JavaScript. Метод readAsText идеально подходит для обработки текстовых файлов. После завершения процесса чтения содержимое файла будет доступно через событие onload.
document.querySelector('input[type="file"]').onchange = (e) => {
  const reader = new FileReader();
  reader.onload = () => console.log(reader.result);
  reader.readAsText(e.target.files[0]);
};
Чтение файла начнется сразу после его выбора пользователем, что вызовет событие onchange.

Разнообразие браузеров
API FileReader поддерживается всеми современными браузерами, включая Firefox, Chrome, Safari и Edge. Однако стоит учесть некоторые особенности:
- Браузеры, основанные на WebKit, такие как Safari, ранее использовали свойства 
fileNameиfileSize, но в настоящее время они стандартизированы какnameиsizeсогласно спецификации File API. 
Проверяйте актуальность информации о совместимости браузеров на сайте Can I Use.
Специфика не текстовых файлов и устаревших браузеров
Для не текстовых файлов используйте методы readAsBinaryString или readAsArrayBuffer. В устаревших браузерах, таких как Internet Explorer, могут быть необходимы специализированные подходы:
- Старые версии браузера IE могут требовать использования объекта ActiveX. 
Scripting.FileSystemObjectспособен читать файлы, но его использование часто сопряжено с проблемами безопасности. 
Для браузеров, которые не поддерживают FileReader, можно использовать полифилы, например blob-polyfill.
Обработка ошибок и вопросы безопасности
Для управления возможными ошибками используйте блоки try-catch и событие onerror в FileReader.
reader.onerror = (error) => {
  console.error('Ошибка при чтении файла:', error);
};
Будьте внимательны к аспектам безопасности при чтении файлов на клиентской стороне. Оберегайте данные файла от нежелательных последствий.
Визуализация
Предположим, вы визуализируете содержимое файлов, прочитанных на клиентской стороне в JavaScript, как разнообразные кулинарные стенды на фестивале:
| Браузер | Стенд с едой | 
|---|---|
| Firefox | Суши-бар 🍣 | 
| Chrome | Пиццерия 🍕 | 
| Safari | Фургон с бургерами 🍔 | 
| Edge | Такерия 🌮 | 
Разнообразие API, представленных разными браузерами, можно сравнить с уникальными гастрономическими изысками на фестивале.
Продвинутые методы работы с файлами
Асинхронное чтение с использованием async/await
Операции чтения файлов можно упростить с помощью async/await. Вот пример:
document.querySelector('input[type="file"]').onchange = async (e) => {
  const reader = new FileReader();
  reader.onload = () => console.log(reader.result);
  try {
    const file = e.target.files[0];
    await reader.readAsText(file);
  } catch (error) {
    console.error(error);
  }
};
Обработка файлов после их загрузки
После срабатывания события load вы можете обрабатывать содержимое файла, например, вы можете использовать его для хэширования или анализа:
reader.onload = () => {
  const fileContentHash = someHashFunction(reader.result);
  console.log(fileContentHash);
};
Вывод содержимого файла в элементы DOM
Используйте результат чтения файла для отображения его содержимого в элементах DOM:
reader.onload = () => {
  document.getElementById('file-content').innerText = reader.result;
};
Если вы используете innerHTML, обязательно проведите санитизацию содержимого, чтобы предотвратить возможность XSS-атак.
Стандарты, участие в развитии и ваш вклад в интернет
File API активно развивается в рамках HTML5. Вы можете принять участие в обсуждении в почтовом списке WHATWG или внести свой вклад в улучшение стандартов.
Полезные материалы
- FileReader – Web APIs | MDN — документация и примеры использования API FileReader.
 - HTML Standard — официальная спецификация File API HTML.
 - "File API" | Can I use... Support tables for HTML5, CSS3, etc — информация о совместимости File API с браузерами.
 - Using files from web applications – Web APIs | MDN — руководство по работе с файлами в веб-приложениях.
 - GitHub – bgrins/filereader.js: A lightweight wrapper for the JavaScript FileReader interface — удобная обертка для FileReader API.
 - Blob – Web APIs | MDN — информация о работе с объектом Blob.
 


