JavaScript FileReader — читання файлу в браузері


FileReader читає вміст файлу асинхронно: як текст, як Data URL (для прев'ю) або як сирі байти.

автор: NagarD

Загальний опис

Читання файлу — операція повільна, тож FileReader побудований на подіях: викликаєш readAsText(), а результат забираєш в обробнику onload із reader.result.

Є три способи читання: readAsText() для текстових файлів, readAsDataURL() — щоб одразу підставити в src зображення, і readAsArrayBuffer() — коли потрібні сирі байти.

Окремий козир — подія progress: для великих файлів можна чесно показати смугу поступу.

автор: NagarD

Порада

Якщо поступ не потрібен, FileReader уже застарілий: await file.text() і await file.arrayBuffer() роблять те саме одним рядком, без обробників.

автор: NagarD

Синтаксис

const reader = new FileReader();\nreader.readAsText(file);

властивості

Властивість Опис
result Прочитаний вміст після завершення.
error Помилка читання, якщо була.
readyState Стан: 0 порожній, 1 читає, 2 завершено.

методи

Метод Опис
readAsText Читає як текст.
readAsDataURL Читає як data:-адресу (для прев'ю зображень).
readAsArrayBuffer Читає як двійковий буфер.
abort Перериває читання.

Переглядачі

Підтримка: стаціонарні переглядачі
Переглядач Google Chrome Mozilla Firefox Apple Safari Opera Microsoft EDGE Microsoft Internet Explorer
FileReader 7+ 3.6+ 6+ 12.1+ 12+ 10+
Підтримка: мобільні переглядачі
Переглядач Mobile Google Android Mobile Google Chrome Mobile Mozilla Firefox Mobile Apple Safari
FileReader 4.4+ yes yes 6+

Приклади

+ запропонувати свій приклад у пісочниці

Читання текстового файлу — старим способом і сучасним.

HTML

<input type="file" id="file">

JS

const input = document.getElementById('file');

input.addEventListener('change', () => {
    const file = input.files[0];
    const reader = new FileReader();

    reader.onload = () => console.log(reader.result);
    reader.onerror = () => console.error('Не вдалося прочитати');

    // поступ для великих файлів
    reader.onprogress = event => {
        if (event.lengthComputable) {
            console.log(Math.round(event.loaded / event.total * 100) + '%');
        }
    };

    reader.readAsText(file);
});

// те саме сучасно, якщо поступ не потрібен:
// const text = await input.files[0].text();
автор: NagarD

Коментарі

Коментарів ще немає — будьте першим!

Відповідь для

Увійдіть — коментар з'явиться одразу, без капчі й очікування перевірки.

Пропозиція правки

Ваша версія — : після перевірки замінить чинну. Нова порада чи нотатка — з'явиться на сторінці після перевірки.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Ваша версія секції «»: після перевірки замінить чинну.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Ваша версія опису «»: після перевірки замінить чинну.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Зворотний зв'язок
Вхід