Search code examples
node.jsmongodbexpressnode-modulesmulter

Error uploading multiple images in node.js


I am trying to upload images in mongo db but after clicking on send in postman it shows "img": null

I am using flutter for frontend so I want to make a rest api I am able to upload single image but when I am trying to upload multiple images it shows "img": null

I have also created a schema

where I have set

 img:{
type: array,
default:"",
}


const express = require("express");
const router = express.Router();
const Profile = require("../models/profile.model");
const middleware = require("../middleware");
const multer = require("multer");
const path = require("path");
const storage = multer.diskStorage({
  destination: (req, file, cb) => {
    cb(null, "./uploads");
  },
  filename: (req, file, cb) => {
    cb(null, req.decoded.username + ".jpg");
  },
});

const fileFilter = (req, file, cb) => {
  if (file.mimetype == "image/jpeg" || file.mimetype == "image/png") {
    cb(null, true);
  } else {
    cb(null, false);
  }
};

const upload = multer({
  storage: storage,
  limits: {
    fileSize: 1024 * 1024 * 6,
  },
  // fileFilter: fileFilter,
});

//adding and update profile image
router
  .route("/add/image")
  .patch(middleware.checkToken, upload.array("img",5), (req, res) => {
    Profile.findOneAndUpdate(
      { username: req.decoded.username },
      {
        $set: {
          img: req.files.path,
        },
      },
      { new: true },
      (err, profile) => {
        if (err) return res.status(500).send(err);
        const response = {
          message: "image added successfully updated",
          data: profile,
        };
        return res.status(200).send(response);
      }
    );
  });


Solution

  • when you upload multiple images, multer create a array of object like this :

    req.files : [{…}, {…}, {…}]
    

    that one of the property of objects is path, so there are many way to insert to path in img. if type of img defined array [] in schema you can do like this in findOneAndUpdate :

          {
            $set: {
              img: req.files.map(file => file.path),
            },
          }