Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

199
Views
¿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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!