gpt4 book ai didi

node.js - 在没有 GridFS 的 NodeJS 中使用 MongoDB 存储一些小(小于 1MB)文件

转载 作者:IT老高 更新时间:2023-10-28 13:04:44 25 4
gpt4 key购买 nike

我运行一个在 nodeJS + mongoDB 后端运行的网站。现在,我正在实现一个系统来存储一些需要在数据库中的图标(小图像文件)。

据我了解,不使用 GridFS 更有意义,因为它似乎是为大文件或大量文件量身定制的。由于我需要保存的每个文件都将远低于 BSON 最大文件大小,因此我应该能够将它们直接保存到常规文档中。

我有两个问题:

1) 我的推理正确吗?可以将图像文件保存在常规的 mongo 集合中,而不是使用 GridFS 吗?有什么我不应该考虑的吗?

2) 如果我的思维过程是健全的,我该怎么做呢?我可以执行以下操作吗:

//assume 'things' is a mongoDB collection created properly using node-mongodb-driver

fs.readFile(pathToIconImage, function(err,image){
things.insert({'image':image}, function(err,doc){
if(err) console.log('you have an error! ' + err);
});
});

我猜可能有更好的方法来做到这一点,因为 mongoDB 使用 BSON,在这里我尝试在将文件发送到数据库之前将其保存为 JSON。我也不知道这段代码是否有效(没试过)。

更新 - 新问题

如果我的集合中有一个文档,其中保存了三条信息:1) 名称、2) 日期和 3) 图像文件(上面的图标),并且我想将此文档发送到客户端为了显示所有三个,这可能吗?如果没有,我想我需要使用 GridFS 并保存 fileID 来代替图像本身。想法/建议?

最好,感谢您的任何回复,
萨米

最佳答案

如果您的图像确实足够小,不会成为文档大小的问题,并且您不介意进行少量额外处理,那么将其直接存储在您的收藏中可能就可以了。为此,您需要对图像进行 base64 编码,然后使用 mongo 的 BinData 类型存储它。据我了解,这会将其保存为 BSON 位数组,而不是实际存储 base64 字符串,因此大小不会比原始二进制图像大。

它将在 json 查询中显示为 base64 字符串,您可以使用它来获取二进制图像。

关于node.js - 在没有 GridFS 的 NodeJS 中使用 MongoDB 存储一些小(小于 1MB)文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11442356/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com