Как отобразить blob в кодировке utf8 в VueJS / Javascript

Я пытаюсь преобразовать двоичный BLOB-объект, полученный из базы данных, в изображение, которое я могу отобразить с помощью <img>-Tag.

В моем бэкэнде Laravel я возвращаю blob / data следующим образом:

$user = User::find($id);

$user->photo = utf8_encode($user->photo); // $user->photo is saved as blob in MySQL database

return $user;

Причина, по которой я использую utf8_encode, заключается в том, что данные возвращаются в формате JSON.

В VueJS я пробовал сделать следующее для рендеринга изображения:

<input type = "file" @change = "onFileSelect">
<img :src = "setImage(userdata.photo)">

setImage(image) {
    let objurl = window.URL.createObjectURL(new Blob([image]));

    return objurl;
}

onFileSelect(e) {
    this.userdata.photo = e.target.files[0];
}

Если я выберу файл в input, изображение будет отображаться соответствующим образом. Но когда я получаю данные с сервера, он должен загрузить сохраненное изображение.

Если я использую console.info(image) внутри метода setImage(image) после запроса сервера, я получаю следующий вывод:

PNG

IHDRu<ÔFiCCPICC ProfileHWXSÉ[RIh¤ÞD)Ò¥Ð"Hl$PBL"vdQÁµØÐUE×ÈZ±E±÷e],ØPyºú½÷¾w¾ïÜûçÌÿ̽w­®Dj+ÎÆ3Ç¥¤2I0t.O&aÅÆF(÷Ê»ëQܯ8+¸~ÿ¯¢ÃÈx ±§óe¼\÷ð$Ò|ÞÐn55_¢À ÖÂ!(p¦ (pº W*}âØïLãr¥h6C;³ y4oBì"æÄh!à ¹|# §ÀÐØ§ÇùÎôAN.7s«jQ 9D$äp§ýíøß#a&FÄ)j}»©À4»ÅéÑ1ëBüAÄWúCRòD?j±aÏÄ.|nH$Ä&s¢£ÔöôQb¸BÐBQ>'A=w@¯æ¬æÅÅà)¥ÛÀãüOȳYjþBgÿm0!Y3F-%EC¬ ±,;>RåY ÙÑ>Ry"k}âð?6)C§öæÊêÅEh5®Ê&D¨yvð¸Êü !nY<Ù¸¨ZøPUíØ%8Q]/Ö!ÉSÏ}-ÉUûãTAN¸Ân ±¬ ^=ÈRÅGKòcTyâéYÜѱª|ðBØ 0j:ÈY@ÔÖÝÔ ©FÂHA&gµeF²rD¯ñ üÈç+G Ú¿ZUWg¡-PÎÈO Î þ+g£%ÇÐ"ú):æU1ö³-Qj|©5àI%#aDÜÀýð(x ê{ã>Ù~ó'bG°fìvHWÑcå*§Ì'ò~ÇUÇTtRæRïÒåòY5/(T¼;O2M*Êæ3YðÍ/rļáÃn.®ð­­ø¨^S=ßÄHçm|nGi÷÷÷øf@ãP¨ÝßlöЯpf>O.-PÙpÅ¿PZð2fÀ

Если я передам этот материал своему методу setImage(), я не получу никаких ошибок. URL-адрес большого двоичного объекта создается, но тег <img> показывает просто «пустое» изображение. И так далее. Есть ли способ преобразовать этот blob-объект utf8_encoded во что-нибудь полезное?

Почему вы храните изображение как blob в БД?

common sense 09.01.2019 15:09

@commonsense Вот как я хотел бы обрабатывать свою загрузку. Я не хочу создавать папку tmp или что-то в этом роде, где я сохраняю каждую загрузку.

Mango D 09.01.2019 15:11
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
2
712
1

Ответы 1

Я не могу комментировать, поэтому должен был опубликовать ответ. При необходимости сниму.

Вы можете использовать библиотеку для обработки синтаксического анализа BLOB-объектов во внешнем интерфейсе.

https://www.npmjs.com/package/blob-util

В эту библиотеку встроена поддержка модуля ES, поэтому она должна работать с Vue.

Другие вопросы по теме