将来自node.js请求的base64数据直接流式传输到PostgreSQL数据库中

时间:2018-07-23 13:36:06

标签: node.js postgresql streaming node-streams

我对流媒体有疑问。

我目前正在从node.js的一个数据库中获取base64编码的文件,并希望将其存储在postgreSQL数据库中。

我正在尝试以最有效的方式构建它,因为可能会发生各种大小(有些很大)文件的下载。

您可以直接从node.js request()流式传输到Postgresql表吗?如果不是,最有效的方法是什么?

我在想类似的东西:

function examplePipeData() {

  var request = require('request');
  var pg = require('pg');
  var copyFrom = require('pg-copy-streams').from;

  // get file data
  var fileUrl = 'www.myfile.com/file.pdf';
  var fileStream = request.get(fileUrl).pipe(fs.createWriteStream('file.pdf'));

  fileStream.on('error', function(err) {
     console.log(err);
  });

  fileStream.on('finish', function(res) {
    // when done, connect to database and upload
    pg.connect(function(err, client, done) {
      // copy stream
      var stream = client.query(copyFrom('COPY my_table FROM STDIN'));
      // can you do this sort of thing?
      // convert to CSV style string i.e. 'name, base64, file.pdf, res'
      var newFileStream = fs.createReadStream(fileStream);
      newFileStream.on('error', done);
      newFileStream.pipe(stream).on('finish', done).on('error', done);
    });
  });

}

文件将存储在具有一堆列的表中,其中一列是“ base64”列,如果要使用PG COPY,在某些时候我需要创建一种1行CSV格式模块,但是这样做不会把文件放到内存中吗?

我知道您在读取/写入大文件以帮助内存使用时应该使用流,但是想知道在这种情况下它如何工作,因为我们先在节点内下载然后上传

任何建议阅读的方法都将不胜感激,我曾经单独使用读/写流,但在此用例中并未合并使用。

0 个答案:

没有答案