JavaScript FileReader — читання файлу в браузері
FileReader читає вміст файлу асинхронно: як текст, як Data URL (для прев'ю) або як сирі байти.
Загальний опис
Читання файлу — операція повільна, тож FileReader побудований на подіях: викликаєш readAsText(), а результат забираєш в обробнику onload із reader.result.
Є три способи читання: readAsText() для текстових файлів, readAsDataURL() — щоб одразу підставити в src зображення, і readAsArrayBuffer() — коли потрібні сирі байти.
Окремий козир — подія progress: для великих файлів можна чесно показати смугу поступу.
- Порада
-
Якщо поступ не потрібен,
автор: NagarDFileReaderуже застарілий:await file.text()іawait file.arrayBuffer()роблять те саме одним рядком, без обробників.
Синтаксис
const reader = new FileReader();\nreader.readAsText(file);
властивості
| Властивість | Опис |
|---|---|
| result | Прочитаний вміст після завершення. |
| error | Помилка читання, якщо була. |
| readyState | Стан: 0 порожній, 1 читає, 2 завершено. |
методи
| Метод | Опис |
|---|---|
| readAsText | Читає як текст. |
| readAsDataURL | Читає як data:-адресу (для прев'ю зображень). |
| readAsArrayBuffer | Читає як двійковий буфер. |
| abort | Перериває читання. |
Переглядачі
| Переглядач | ||||||
|---|---|---|---|---|---|---|
| FileReader | 7+ | 3.6+ | 6+ | 12.1+ | 12+ | 10+ |
| Переглядач | ||||
|---|---|---|---|---|
| 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();
Коментарі
Коментарів ще немає — будьте першим!