FileReader

Асинхронный интерфейс чтения объекта File или Blob

class FileReader
let reader = new FileReader()
reader.readAsDataURL(url)
reader.onloadend = function() {}

img.src = reader.result;
error

Ес­ли ошиб­ка воз­ник­нет во вре­мя чте­ния, это свой­ст­во бу­дет ссы­лать­ся на объ­ект FileError, опи­сы­ваю­щий ошиб­ку.

onabort

Вы­зы­ва­ет­ся, ес­ли опе­ра­ция чте­ния бы­ла пре­рва­на ме­то­дом abort().

onerror

Вы­зы­ва­ет­ся, ес­ли воз­ник­ла ка­кая-ли­бо ошиб­ка.

Свой­ст­во error объ­ек­та FileReader бу­дет ссы­лать­ся на объ­ект FileError, ко­то­рый име­ет свой­ст­во code с ко­дом ошиб­ки.

onload

Вы­зы­ва­ет­ся в слу­чае ус­пеш­но­го за­вер­ше­ния опе­ра­ции чте­ния объ­ек­та File или Blob.

Свой­ст­во result объ­ек­та FileReader хра­нит со­дер­жи­мое объ­ек­та File или Blob в ви­де, за­ви­ся­щем от ис­поль­зо­вав­ше­го­ся ме­то­да чте­ния.

onloadend

Ка­ж­дый вы­зов ме­то­да чте­ния объ­ек­та FileReader в ко­неч­ном ито­ге воз­бу­ж­да­ет со бы­тие «load», «error» или «abort».

Кро­ме то­го, по­сле ка­ж­до­го из этих со­бы­тий объ­ект FileReader воз­бу­ж­да­ет со­бы­тие «loadend» для про­грамм, в ко­то­рых бы­ло бы же­ла­тель­но об­ра­ба­ты­вать един­ст­вен­ное со­бы­тие вме­сто трех.

onloadstart

Вы­зы­ва­ет­ся по­сле вы­зо­ва ме­то­да чте­ния, но пе­ред тем как бу­дут про­чи­та­ны ка­кие-ли­бо дан­ные.

onprogress

Воз­бу­ж­да­ет­ся при­мер­но 20 раз в се­кун­ду, по­ка вы­пол­ня­ет­ся чте­ние дан­ных из объ­ек­та File или Blob.

Объ­ект ProgressEvent по­зво­ля­ет уз­нать ко­ли­че­ст­во про­чи­тан­ных бай­тов, а свой­ст­во result объ­ек­та FileReader мо­жет со­дер­жать пред­став­ле­ние этих бай­тов.

readyState

Это свой­ст­во опи­сы­ва­ет те­ку­щее со­стоя­ние объ­ек­та FileReader.

Его зна­че­ни­ем бу­дет од­на из трех кон­стант:

  • EMPTY = 0, Ме­тод чте­ния еще не был вы­зван.

  • LOADING = 1, Вы­пол­ня­ет­ся опе­ра­ция чте­ния.

  • DONE = 2, Опе­ра­ция чте­ния за­вер­ши­лась, ус­пеш­но или с ошиб­кой.

result

Ес­ли опе­ра­ция чте­ния за­вер­шит­ся ус­пеш­но, это свой­ст­во бу­дет хра­нить со­дер­жи­мое объ­ек­та File или Blob в ви­де стро­ки или объ­ек­та ArrayBuffer (в за­ви­си­мо­сти от ис­поль­зо­вав­ше­го­ся ме­то­да чте­ния).

Ко­гда свой­ст­во readyState име­ет зна­че­ние LOADING или ко­гда воз­бу­ж­да­ет­ся со­бы­тие «progress», это свой­ст­во мо­жет хра­нить не­пол­ное со­дер­жи­мое объ­ек­та File или Blob.

Ес­ли ме­тод чте­ния еще не был вы­зван или ес­ли воз­ник­ла ошиб­ка, это свой­ст­во бу­дет иметь зна­че­ние null.

abort()

Пре­ры­ва­ет опе­ра­цию чте­ния.

Он при­сваи­ва­ет свой­ст­ву readyState зна­че­ние DONE, свой­ст­ву result – зна­че­ние null и свой­ст­ву error – объ­ект FileError со свой­ст­вом code, ус­та­нов­лен­ным в зна­че­ние FileError.ABORT_ERR.

По­сле это­го воз­бу­ж­да­ют­ся со­бы­тия «abort» и «loadend».

readAsArrayBuffer(Blob blob)

Асин­хрон­но чи­та­ет дан­ные из объ­ек­та blob и со­хра­ня­ет их в свой­ст­ве result в ви­де объ­ек­та ArrayBuffer.

readAsBinaryString(Blob blob)

Асин­хрон­но чи­та­ет бай­ты дан­ных из объ­ек­та blob, пре­об­ра­зу­ет их в дво­ич­ную стро­ку и со­хра­ня­ет ее в свой­ст­ве result.

Ка­ж­дый «сим­вол» в дво­ич­ной стро­ке пред­став­лен ко­дом сим­во­ла в диа­па­зо­не от 0 до 255.

Из­вле­кать эти зна­че­ния бай­тов мож­но с по­мо­щью ме­то­да String.charCodeAt().

Сле­ду­ет от­ме­тить, что дво­ич­ные стро­ки яв­ля­ют­ся не са­мым эф­фек­тив­ным пред­став­ле­ни­ем дво­ич­ных дан­ных: вме­сто них сле­ду­ет ис­поль­зо­вать объ­ек­ты ArrayBuffer, ко­гда это воз­мож­но.

readAsDataURL(Blob blob)

Асин­хрон­но чи­та­ет бай­ты дан­ных из объ­ек­та blob, пре­об­ра­зу­ет их (учи­ты­вая тип объ­ек­та Blob) в URL-ад­рес data:// и при­сваи­ва­ет по­лу­чен­ную стро­ку свой­ст­ву result.

readAsText(Blob blob[, string encoding])

Асин­хрон­но чи­та­ет бай­ты дан­ных из объ­ек­та blob, де­ко­ди­ру­ет их с ис­поль­зо­ва­ни­ем ко­ди­ров­ки encoding в тек­сто­вую стро­ку Юни­ко­да и за­тем при­сваи­ва­ет по­лу­чен­ную стро­ку свой­ст­ву result.

Ес­ли ар­гу­мент encoding не ука­зан, ис­поль­зу­ет­ся ко­ди­ров­ка UTF-8 (текст в ко­ди­ров­ке UTF-16 оп­ре­де­ля­ет­ся и де­ко­ди­ру­ет­ся ав­то­ма­ти­че­ски, ес­ли он на­чи­на­ет­ся с мар­ке­ра Byte Order Mark)