Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

210
Visualizações
¿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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda