Задать вопрос
@Kneepy

Как правильно хранить Blob в бд?

Есть ссылка вида
blob:http://localhost:8080/ad028394-c137-4842-aeeb-24c74fea28de
полученная в результате new Blob([file], { type: "image/png" }); и последующего URL.createObjectURL(blob), при попытке вывести эту ссылку в img выходит ошибка
GET blob:http://localhost:8080/ad028394-c137-4842-aeeb... net::ERR_FILE_NOT_FOUND

И да, я прекрасно понимаю что даже в официальной документации написано
Сгенерированный url действителен, только пока текущий документ открыт.

Но вопрос в том что можно ли каким либо образом хранить эти файлы как ссылке без преобразования в base64
  • Вопрос задан
  • 408 просмотров
Подписаться 1 Простой 5 комментариев
Пригласить эксперта
Ответы на вопрос 1
zkrvndm
@zkrvndm
Архитектор решений
Если дело происходит в браузере, можно файлы сохранить в IndexedDB и они там будут оставаться даже после перезагрузки страницы. Для сохранения file в IndexedDB сначала подключайте на станице библиотеку localforage:
<script src="https://cdnjs.cloudflare.com/ajax/libs/localforage/1.9.0/localforage.min.js"></script>


Далее уже можно спокойно закинуть файл в память браузер вот так:
async function saveFile(file) {
    var result = await localforage.setItem('file', file);
    console.log('Файл сохранён:');
    console.dir(result);
}

Вызывайте функцию saveFile передав ему аргументом тот файл, который надо сохранить.

Чтобы потом извлечь этот файл из памяти и вставить в тег src у картинки:
async function getFile() {
    var file = await localforage.getItem('file');
    document.querySelectror('img').src = URL.createObjectURL(file);
    console.log('Файл вставлен:');
    console.dir(file);
}

Просто вызывайте функцию getFile.

Подробнее о библиотеке localforage можно почитать здесь:
https://html5.by/blog/localforage/

Выше просто примеры. Чтобы допилить под себя рекомендую ознакомится с тем, что такое промисы и чем отличаются асинхронные функции от обычных + постараться понять, как работает async / await.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы