Перейти к содержимому

Как прочитать файл js

  • автор:

File и FileReader

Объект File наследуется от объекта Blob и обладает возможностями по взаимодействию с файловой системой.

Есть два способа его получить.

Во-первых, есть конструктор, похожий на Blob :

new File(fileParts, fileName, [options])
  • fileParts – массив значений Blob / BufferSource /строки.
  • fileName – имя файла, строка.
  • options – необязательный объект со свойством:
    • lastModified – дата последнего изменения в формате таймстамп (целое число).

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

    Так как File наследует от Blob , у объектов File есть те же свойства плюс:

    • name – имя файла,
    • lastModified – таймстамп для даты последнего изменения.

    В этом примере мы получаем объект File из :

       

    На заметку:

    Через можно выбрать несколько файлов, поэтому input.files – псевдомассив выбранных файлов. Здесь у нас только один файл, поэтому мы просто берём input.files[0] .

    FileReader

    FileReader объект, цель которого читать данные из Blob (и, следовательно, из File тоже).

    Данные передаются при помощи событий, так как чтение с диска может занять время.

    let reader = new FileReader(); // без аргументов
    • readAsArrayBuffer(blob) – считать данные как ArrayBuffer
    • readAsText(blob, [encoding]) – считать данные как строку (кодировка по умолчанию: utf-8 )
    • readAsDataURL(blob) – считать данные как base64-кодированный URL.
    • abort() – отменить операцию.

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

    • readAsArrayBuffer – для бинарных файлов, для низкоуровневой побайтовой работы с бинарными данными. Для высокоуровневых операций у File есть свои методы, унаследованные от Blob , например, slice , мы можем вызвать их напрямую.
    • readAsText – для текстовых файлов, когда мы хотим получить строку.
    • readAsDataURL – когда мы хотим использовать данные в src для img или другого тега. Есть альтернатива – можно не читать файл, а вызвать URL.createObjectURL(file) , детали в главе Blob.

    В процессе чтения происходят следующие события:

    • loadstart – чтение начато.
    • progress – срабатывает во время чтения данных.
    • load – нет ошибок, чтение окончено.
    • abort – вызван abort() .
    • error – произошла ошибка.
    • loadend – чтение завершено (успешно или нет).

    Когда чтение закончено, мы сможем получить доступ к его результату следующим образом:

    • reader.result результат чтения (если оно успешно)
    • reader.error объект ошибки (при неудаче).

    Наиболее часто используемые события – это, конечно же, load и error .

    Вот пример чтения файла:

       

    FileReader для Blob

    Как упоминалось в главе Blob, FileReader работает для любых объектов Blob, а не только для файлов.

    Поэтому мы можем использовать его для преобразования Blob в другой формат:

    • readAsArrayBuffer(blob) – в ArrayBuffer ,
    • readAsText(blob, [encoding]) – в строку (альтернатива TextDecoder ),
    • readAsDataURL(blob) – в формат base64-кодированного URL.

    Для Web Worker также доступен FileReaderSync

    Для веб-воркеров доступен синхронный вариант FileReader , именуемый FileReaderSync.

    Его методы считывания read* не генерируют события, а возвращают результат, как это делают обычные функции.

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

    Итого

    File объекты наследуют от Blob .

    Помимо методов и свойств Blob , объекты File также имеют свойства name и lastModified плюс внутреннюю возможность чтения из файловой системы. Обычно мы получаем объекты File из пользовательского ввода, например, через или перетаскиванием с помощью мыши, в событии dragend .

    Объекты FileReader могут читать из файла или Blob в одном из трёх форматов:

    • Строка ( readAsText ).
    • ArrayBuffer ( readAsArrayBuffer ).
    • URL в формате base64 ( readAsDataURL ).

    Однако, во многих случаях нам не нужно читать содержимое файла. Как и в случае с Blob, мы можем создать короткий URL с помощью URL.createObjectURL(file) и использовать его в теге или . Таким образом, файл может быть загружен или показан в виде изображения, как часть canvas и т.д.

    А если мы собираемся отправить File по сети, то это также легко, поскольку в сетевые методы, такие как XMLHttpRequest или fetch , встроена возможность отсылки File .

    Как считать текстовый файл с помощью Javascript?

    Здравствуйте. Есть необходимость в обработке текстового файла построчно, например как это делается в C#. К сожалению, у меня мало времени для настройки сервера и я в этом не разбираюсь, поэтому PHP не вариант. Можно ли подобную работу провести в Javascript?

    • Вопрос задан более трёх лет назад
    • 7125 просмотров

    2 комментария

    Простой 2 комментария

    Fzero0

    На локальном компьютере?

    Чтение локального файла средствами JavaScript

    Здравствуйте!
    Сразу прошу тапками не кидаться — честно гуглил, но адекватного ответа не нашел. Мне нужно считать указанный пользователем файл (с локальной машины конечно же) именно в JavaScript. Задача такая, а не моя фантазия. Вроде бы это можно сделать средствами HTML5 (File API), и кстати нормально так делается.
    Но вездесущий IE как всегда все портит, а потому нужна альтернатива как минимум для него, ибо он File API до сих пор не поддерживает.
    Конечно же, в идеале, нужна кроссбраузерная альтернатива, если такая имеется. Собственно в этом и весь вопрос к вам, знатоки. в альтернативе.

    Отслеживать

    задан 27 мар 2013 в 16:53

    494 1 1 золотой знак 4 4 серебряных знака 19 19 бронзовых знаков

    без fileapi — только флэш/java. но я бы просто сделал — те кто fileapi поддерживают используют его, а те кто нет. по-старинке POST

    27 мар 2013 в 17:15

    Может, костыль: слать файл на свой сервер, и оттуда уже отдавать юзеру?

    как прочитать файл node js

    Как было упомянуто в вопросе данные из файла, для чтения файла в окружении Node.js используется модуль для работы с файловой системой fs и его метода readFile() :

    const fs = require('fs'); fs.readFile('report.txt', 'utf8', (err, data) =>  if (err) throw err; console.log(data); >); 

    В результате файл report.txt был полностью прочитан в кодировке utf8 , которую мы указали в качестве параметра при вызове метода readFile() .

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *