Как я могу сохранить изображение из формы ввода html в байтовый массив и вставить его в указанное поле c коллекции в mongodb? - PullRequest
0 голосов
/ 10 апреля 2020

Я пытаюсь сохранить изображение в базе данных и установить это изображение в поле в коллекции в 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)
      });
  },
}
...