Cómo enviar imágenes como datos json desde el servidor nodejs

Galletas

Puede devolver la imagen como un cuerpo de respuesta de imagen normal y luego configurar una cookie de sesión con la misma solicitud. La cookie de sesión contendría los datos JSON. Una vez que se carga la imagen, puede extraer los datos JSON de la cookie a través de JavaScript.

Esto funcionaría en todos los navegadores. La única limitación sería el tamaño del JSON que podría devolver. El tamaño máximo parece ser 4093 bytes.

Codificación de imagen

Si su JSON es demasiado grande para caber en una cookie, entonces podría codificar la imagen como un objeto base64 y devolver los datos de la imagen en la respuesta JSON.

En este caso, tendría que reconstruir la imagen en un lienzo o usar el formato de url de datos de imagen para crear dinámicamente un objeto de imagen como lo hace la url en el comentario de Kevin.

Una desventaja de la codificación de imágenes sería el mayor tamaño de la respuesta. Aproximadamente, el tamaño de la imagen después de la codificación en base64 sería un 37% más grande que la imagen original.

app.get (‘/’, function (req, res) {
if (req.accepts (‘text / html’)) {
res.sendfile (__ dirname + ‘/index.html’);
regreso;
}
sino if (req.accepts (‘application / json’)) {
res.json ({‘clave’: ‘valor’});
regreso;
}
});

En su lugar, puede cargar la imagen en su disco y simplemente pasar la cadena url / ruta. Es la mejor y más rápida forma.

Ejemplo

Subes una foto en una ruta {{root_dir}} / data / user / image / test.jpeg

En su json, simplemente puede pasar la ruta de la imagen

{

imagen: ‘{{root_dir}} / data / user / image / test.jpeg’

}

envíalo como un archivo no como un json.
El análisis de la secuencia de imágenes de bytes requerirá mucho procesamiento.

Pero hay forma si quieres. Pero ten cuidado
Tome la secuencia del archivo de la imagen y luego conviértala a algún formato de texto estándar como utf-8 y luego, en el extremo del cliente, vuelva a convertirla en imagen.

Pero mi consejo es que no hagas esto, tu analizador JSON en ambos extremos consumirá muchísimos recursos.

Si está utilizando Websockets, le sugiero que use la biblioteca socket.io.
Para archivos de imagen necesitará codificación base64.

Los módulos que necesitará son:
-fs
-socket.io

Feliz codificación :).