Node.js将二进制文件转换为utf8

时间:2015-04-27 17:28:17

标签: javascript node.js postgresql jasper-reports binary-data

我有一个以二进制格式(bytea)存储在postgresql数据库中的jrmxl(Jasper报告)文件。我试图读取该文件并将其转换为普通的jrmxl(XML)文件并将其保存在磁盘上。

这是我迄今为止所尝试的内容

var fs = require('fs');
exports.saveFile = function (pg) {
  //pg is the postgres connection to query the db
  pg.query('Select data from data_file where id = 123', function (err, result) {
    if (err) {
      console.log(err);
      return;
    }

    var data = result.rows[0].data;

    //Buffer.isBuffer(data) === true

    // I can get the data here. Now I try to convert it into text
    var file = data.toString('utf8');

    fs.writeFile('report.jrxml',file, function (er) {
      if (er) {
        console.log('an error occurred while saving the file');
        return;
      }
      console.log('file saved');
    }} 
  });
}

如果我运行上面的代码,文件将被保存,但它以某种方式二进制。 我如何将其转换为文本格式的普通xml文件,我可以在ireport中导入,例如?

1 个答案:

答案 0 :(得分:2)

您可以先尝试浏览缓冲区。我已经使用这种技术将DB BLOB转换为base64字符串。

var fileBuffer = new Buffer( result.rows[0].data, 'binary' ); var file = fileBuffer.toString('utf8');