如何在NodeJS Web应用程序中存储和访问大文件

时间:2018-08-16 01:05:15

标签: javascript node.js postgresql video large-files

如果我想允许用户在帖子中上传视频,那么最好的存储方式是什么,以便以后可以访问?我目前仅使用INSERT查询将其上传到PostGres SQL数据库字段,但是它非常慢。

是否存在另一种方法或最佳实践来存储像这样的大文件并快速有效地访问它?

var video = videoFile ? "'\\x" + videoFile.buffer.toString('hex') + "'" : "NULL";
let insertQuery = "INSERT INTO posts (video) VALUES(" + video + ") RETURNING *";

上面是我现在用来将文件插入数据库的代码。

1 个答案:

答案 0 :(得分:1)

请勿将整个视频存储到数据库中。下面的两个步骤可能是一个更好的解决方案:

1)将视频文件上传到云存储。请参见Google Cloud StrageAmazon S3。还有许多其他选择。自己去做一些比较。

2)您将具有一个链接或ID(或S3中的键)来访问文件。将所有这些链接或ID存储到数据库中。请看看这个GCS doc和这个S3 question

此外,利用non-blocking I/O,这是node.js的优点。在您的情况下,您可以尝试执行以下操作:

let insertQuery;
let promisesList=[];

for(let vid of videoIds){
    insertQuery = "INSERT INTO posts (videoId) VALUES($1) RETURNING *";
    promisesList.push(client.query(query,[vid]));
}
await Promise.all();