Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   FileReader() (https://javascript.ru/forum/events/76696-filereader.html)

atanov 04.02.2019 10:21

FileReader()
 
Доброго времени суток, уважаемые форумчане,

Метод FileReader() не устаревший?
Вообще требуется отобразить картинку, загруженную в input type = 'file', бэкграундом одного из div'ов.

Nexus 04.02.2019 10:49

FileReader - не метод, а класс и нет, не устаревший.
Вместо FileReader'а можете использовать URL.createObjectURL.
Уничтожать только ссылку не забывайте по необходимости.

laimas 04.02.2019 11:02

Цитата:

Сообщение от Nexus
не устаревший

Салага еще, только недавно копытца обмывали. :)

atanov 04.02.2019 16:04

Nexus,
laimas,
а можно установить эту картинку в качестве background-image?

Nexus 04.02.2019 16:09

atanov, можно.
Примерно так:
target.style.backgroundImage='url('+URL.createObjectURL(e.target.files[0])+')';

atanov 04.02.2019 16:17

Nexus,
Спасибо!
А всё-таки, чем URL.createObjectURL лучше FileReader?

Nexus 04.02.2019 16:34

atanov, меньшим кол-вом кода, синхронностью.

atanov 04.02.2019 17:03

Nexus,
синхронность это преимущество?

Nexus 04.02.2019 17:10

atanov, пожалуй нет, но в этом конкретном случае да, т.к. не нужно оборачивать все в обещание (Promise) или выполнять остальной код в callback'е.

Alexandroppolus 05.02.2019 10:30

Цитата:

Сообщение от atanov
А всё-таки, чем URL.createObjectURL лучше FileReader?

помимо синхронности, этот вариант ещё и более экономичный. По крайней мере, не понадобится копия файла в виде строки base64 (которая на 33.3% длиннее к тому же) и вообще возня с этим base64 туда-сюда.

мелкое неудобство - надо не забывать вызвать URL.revokeObjectURL, потому что иначе файлы остаются висеть в памяти до перезагрузки страницы. Впрочем, если у тебя не синглпейдж, то не проблема.


Часовой пояс GMT +3, время: 05:08.