我对流媒体有疑问。
我目前正在从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格式模块,但是这样做不会把文件放到内存中吗?
我知道您在读取/写入大文件以帮助内存使用时应该使用流,但是想知道在这种情况下它如何工作,因为我们先在节点内下载然后上传
任何建议阅读的方法都将不胜感激,我曾经单独使用读/写流,但在此用例中并未合并使用。