相当简单的问题和请求在这里,但还没有找到一个确定的答案。我是 multer、Node 和 MongoDB 的新手,这比我预期的要困难得多。
我想在 MongoDB 中存储小的 JPEG,每个可能不超过 4 MB。我知道 BSON 最大可以小于 16 MB,如果更大,则必须由 gridfs 处理。
这些图像只是我在收藏中拥有的每个 _id 的个人资料照片。到目前为止,我已经能够仅使用 multer 在本地上传文件。现在我想弄清楚如何在 MongoDB 中以正确的方式获取这些图像。
这么小的图像我需要gridfs吗?我执行此操作的最佳计划是什么?
我正在想象将文件更新插入数据库,但想知道这是否只会上传文件名而不是图像本身?我将如何更改我的“模式”以适应这种情况?如果您知道如何在下面更改我的 upsert(与进入 gridFS 相比),那将是理想的。这是代码。
数据库更新:
const updatePlace = async (place) => {
const database = await connect();
return database.collection('place').findOneAndUpdate(
{ _id: new ObjectID(place._id) },
{
$set: {
name: place.name,
category: place.category,
city: place.city,
state: place.state,
country: place.country,
image: { filename: place.image, mime: 'image/jpeg' },
},
},
{ upsert: true, returnOriginal: false }
);
};
存储和上传:
const multer = require('multer');
const storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, './public/uploads');
},
filename: function (req, file, cb) {
cb(null, Date.now() + '_' + file.originalname);
},
});
const upload = multer({ storage: storage });
Mongo DB 项目现在的样子:
{
"_id": {
"$oid": "5fbc37c4fc13ae680b00001e"
},
"name": "Petronas Towers",
"category": "activity",
"city": "Kuala Lumpur",
"state": "Kuala Lumpur",
"country": "Malaysia",
"image": {
"filename": "petronas.jpg",
"mime": "image/jpeg"
}
}