2017-10-04 5 views
2

は私が角度ノード/ためのjava/JSFで1つのウェブサイトを移行していますが、私は、ノードのFirebirdを使用してbase64でのFirebirdのデータベースから変換ブロブのための問題を抱えています。Firebirdのブロブ - 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(); 
}); 

ノードのFirebirdからこのコードは無効BASE64が、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

問題が何であるか分かりません。スクリーンショットは生のバイトのようです。私が推測しなければならない問題は、すべてのバイトを単一のbase64文字列に変換する必要があるということです。現在、base64を個別にbase64にエンコードして連結しているため、base64のパディング( '=' ..)最後の文字列ではなく、文字列を返します。それ、または - 私はnode.jsを知らない - それは 'toString'はあなたが思うことをしないということです。 –

+0

問題は私がjavascript/nodeの初心者であり、学習しようとしていることですが、バイトを読み込んでbase64に変換するこの部分を解決するのに問題があります。 https://github.com/hgourvest/node-firebird#reading-blobs-asynchronous – Douglas

+0

私は、javaのコードをjavascriptに変換し、base64を印刷するだけで済みます。私は有効なbase64を得ることができません – Douglas

答えて

1

おかげで私の問題を解決するためにMark rotteveel

解決策の下で同じ問題を抱えている人がいる場合は、

  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 
      }); 
      });