Я пытаюсь сохранить изображение в базе данных и установить это изображение в поле в коллекции в MongoDB, например, что я хочу сделать sh,
{
_id: "ObjectId(5e8b392a4030eb65a062b36d)",
name: "Post number 01",
thumbnail: [Object Binary]
}
[Object Binary] is просто заполнитель, где я хочу, чтобы данные изображения были сохранены, и я хочу иметь возможность получать это изображение из веб-приложения и отображать его в теге изображения.
То, что я в настоящее время получаю
{
_id: "ObjectId(5e8b392a4030eb65a062b36d)",
name: "Post number 01",
thumbnail: "Example.png"
}
Итак, я попытался использовать GridFS, и это то, что я придумал.
Я создал файл промежуточного программного обеспечения js в папке моего проекта, который содержит этот код, который загружается. js
загрузить. js
const util = require("util");
const multer = require("multer");
const GridFsStorage = require("multer-gridfs-storage");
const dotenv = require("dotenv");
dotenv.config();
var storage = new GridFsStorage({
url: process.env.CONNECTIONSTRING,
options: { useNewUrlParser: true, useUnifiedTopology: true },
file: (req, file) => {
const match = ["image/png", "image/jpeg"];
if (match.indexOf(file.mimetype) === -1) {
const filename = `${Date.now()}-moona-${file.originalname}`;
return filename;
}
return {
bucketName: "photos",
filename: `${Date.now()}-moona-${file.originalname}`,
};
},
});
var uploadFile = multer({ storage: storage }).single("file");
var uploadFilesMiddleware = util.promisify(uploadFile);
module.exports = uploadFilesMiddleware;
и внедрить это в мой контроллер. (myController. js)
const upload = require("../middleware/upload");
module.exports = {
async addItem(req, res, next) { // This is what I'll call in my router.js
try {
await upload(req, res) // The upload Promise that I have promisified in upload.js
if (req.file == undefined) { // If there was no image then send a You must provide an image response.
res.send("You must provide an image.");
}
} catch (error) {
res.send(`Error when trying upload image: ${error}`);
}
let item = new Item(req.body, id); // My custom model that has Create() function in it
item
.create() // Just attempt to create the item and if it fails send the errors, else just send Successfully added the item.
.then(() => {
res.send("Successfully added the item");
})
.catch((errors) => {
res.send(errors)
});
},
}