2017-10-04 4 views
2

Je migration un site Web avec java/JSF pour Noeud/angulaire mais j'ai le problème pour blob convertir la base de données Firebird à l'aide de base64 nœud-firebird.blob Firebird à base64 - Node.js

connection.query(query,function(err,rows){ 

    if(err) { 
    res.json({"Error" : true, "Message" : "Error executing query"}); 
    } else { 

    var buffer; 
    var bufferBase64; 

    for(var i = 0; i < rows.length; i++){ 
     rows[i].image(function(err, name, eventEmitter) { 

     eventEmitter.on('data', function(chunk) { 
      buffer = new Buffer(chunk, 'binary').toString('base64'); 
      bufferBase64 += buffer; 

     }); 
     eventEmitter.on('end', function() { 
     console.log(bufferBase64); // print base64 
     }); 
     }); 

    } 

    res.json(rows); 
    } 
    connection.detach(); 
}); 

Ce code de node-firebird génère un base64 non valide, mais fonctionne avec Java.

byte[] encoded = Base64.getEncoder().encode(rs.getBytes("image")); 
System.out.println(new String(encoded)); 

This is a buffers of a image : [function] that returns from the database

+1

Il ne me semble pas clair quel est le problème, les captures d'écran semble être les octets bruts. Si je devais deviner, votre problème est que vous devez convertir tous les octets en une seule chaîne base64, alors que vous êtes actuellement en train de coder des morceaux individuellement en base64 et de les concaténer, ce qui pourrait conduire à un remplissage base64 ('=' ..) chaîne, au lieu de seulement à la fin. Cela, ou - je ne connais pas node.js - que 'toString' ne fait pas ce que vous pensez. –

+0

Le problème est que je suis un débutant avec javascript/node et j'essaie d'apprendre, mais j'ai du mal à résoudre cette partie de la lecture des octets et la conversion en base64. https://github.com/hgourvest/node-firebird#reading-blobs-asynchronous – Douglas

+0

J'ai juste besoin de transformer le code en java en javascript et d'imprimer un base64. Je ne peux pas obtenir une base64 valide – Douglas

Répondre

1

Merci Mark rotteveel pour résoudre mon problème.

si quelqu'un d'autre a le même problème, en dessous de la solution.

  rows[i].image(function(err, name, eventEmitter) { 
      let buffers = []; 
      eventEmitter.on('data', function(chunk) { 
       buffers.push(chunk); 
      }); 
      eventEmitter.once('end', function() { 
      let buffer = Buffer.concat(buffers); 
      console.log(buffer.toString('base64')); // print base64 
      }); 
      });