Vishnu GS
<img src="https://stackoverflow.com/questions/22740186/picture_1.png" id="imgHolder"/>
Me gustaría guardar la imagen con indexedDB en la base de datos llamada Imágenes al hacer clic en el botón.
<button id="write" onclick="saveToDB()">Save To DB</button>
Otro botón leerá la imagen de la base de datos de imágenes para mostrarla en <div id="resultContent"/>
.
<button id="read" onclick="readFromDB()">Read from DB</button>
Yauhen Vasileusky
idea general es:
- Cree una base de datos con un nombre especificado. Usar
indexedDB.open()
para eso. - Crear un
objectStore
. - Lea un archivo (imagen en su caso) como blob. Usar
XMLHttpRequest
para eso. - Cree una transacción de base de datos.
- Guarde el archivo blob en la base de datos.
- Leer archivo blob de la base de datos.
- Crear URL usando
URL.createObjectURL()
función - Insertar URL en
src
atributo en unimage
etiqueta.
Ver más: https://hacks.mozilla.org/2012/02/almacenamiento-de-imágenes-y-archivos-en-indexeddb/
Buley
Sí, esto es posible. Dentro de la respuesta de @Yauhen hay un enlace a un artículo de Mozilla que puede explicar una posible implementación. Ofreceré un contexto adicional y una solución alternativa usando canvas
.
indexedDB
es un almacén de clave/valor indexado que puede almacenar cualquier tipo de objeto de JavaScript que pueda llamarse “clonado.” Una práctica heurística es que esencialmente cualquier cosa que pueda pasar a un Web Worker puede pasar a IDB.
Para almacenar imágenes, las convierte en cadenas. Las cadenas se pueden clonar, por lo que pueden saveToDB()
y readFromDB()
sin problema
Una forma de convertir una imagen en una representación de cadena es createObjectURL()
que haces en un URL
objeto. Mi método preferido es toDataURL()
que se encuentran en canvas
De cualquier manera, está buscando pasos intermedios para
- cargue su imagen en un blob o en un lienzo y luego
- extraer esos datos en una cadena almacenable.
-
porque prefieres
canvas
‘stoDataUrl()
?– Myers Carpintero
29 de agosto de 2022 a las 13:13
Hay un sandbox de código útil: codepen.io/MSEdgeDev/pen/YqqOLd
– James Bond
19 abr 2022 a las 19:11