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

标签 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) 将视频文件上传至云存储。请参阅Google Cloud StrageAmazon S3 。还有许多其他选择。你自己去比较一下吧。

2) 您将有一个链接或 ID(或 S3 中的 key )来访问文件。将所有这些链接或 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();

关于javascript - 如何在 NodeJS Web 应用程序中存储和访问大文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51868320/

相关文章:

javascript - 如何有条件地验证在 Oracle Application Express 中的项目上创建的验证?

javascript - 调用跨域 API 时出错

javascript - 内部脚本完全加载后如何运行脚本?

mysql - mysql中的UTC_timestamp返回错误值

postgresql 简单选择很慢

javascript - 使用 jQuery 插入 HTML 页面的第一个项目缺少结束标记

node.js - 如何在 Node.js 中正确使用 Mongoose 模型?

javascript - MongoDB/Mongoose - 仅当特定字段唯一时才将对象添加到对象数组

sql - 在 ST_Distance 中使用子查询

sql - PostgreSQL 同比增长