Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

202
Vistas
¿Cómo crear un archivo de imagen a partir de datos de blob de Firebird?

Tengo una tabla Firebird DB, que contiene campos con datos de imagen (como blob sybtype -5). Necesito obtener estos datos y convertirlos en un archivo de imagen. El ejemplo de código a continuación crea un archivo (pero el tamaño es muy grande y, al intentar abrirlo, se dice que ese archivo no es un archivo BMP correcto). ¿Que me estoy perdiendo aqui?

 result[0].OBJ_IMAGE1((err, name, eventEmitter) => { if(err) throw err; let chunks = []; eventEmitter.on('data', chunk => { chunks.push(chunk); }); eventEmitter.once('end', () => { let buffer = Buffer.concat(chunks); fs.writeFile('test.png', buffer, err => { if(err) throw err; console.log('image file written'); }); }); });

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

He probado su código y escribirá correctamente el blob en un archivo. Por lo tanto, su problema es, como también se discutió en los comentarios, uno de no saber cuál es el tipo de archivo de imagen real, por lo que lo está almacenando con la extensión de archivo incorrecta. Debe conocer el tipo de archivo (o la codificación o el cifrado) utilizado por la aplicación que almacena los datos de la imagen para poder seleccionar la extensión de archivo correcta, el visor de imágenes para mostrar los datos y/o las transformaciones adicionales necesarias para obtener un archivo visible.

Mirando los datos de ejemplo y el enlace de firmas de archivos que Marcodor proporcionó, es posible que los datos almacenados sean del tipo "Archivo JPEG estándar con metadatos Exif" ( FF D8 FF E1 xx xx 45 78 69 66 00 ), pero el archivo tiene el prefijo 5 bytes de datos específicos de la aplicación (tal vez algún tipo de identificador, o una longitud de archivo, o algo así). Basado en eso, intente usar SUBSTRING(OBJ_IMAGE1 FROM 6) y vea si guardar como jpg le permite abrir el archivo (NOTA: ¡Esto no significa necesariamente que todos los archivos almacenados en estos blobs sean JPEG!).

Aparte, es más eficiente almacenar la imagen usando:

 result[0].OBJ_IMAGE1((err, name, e) => { if (err) throw err; var imgStream = fs.createWriteStream('filename.ext') e.pipe(imgStream); });

El uso pipe escribirá los fragmentos directamente en un archivo a medida que se reciban, en lugar de acumular todo el archivo en la memoria antes de escribirlo.

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda