Search code examples
node.jsmongoosemulter

Using multer for uploading images


This is my code I have to put 3 images in display image,display images and display logo..How to do it?

const createStore = async (req,res,next) => {
    var id = req.params.tempid;
    var tempDetail = await Template.findById({_id:id})
    console.log("create store running,,,,,,,")
      var store={
        "store_id":req.body.store_id,
        "store_name":req.body.store_name,
        "context": req.body.context,
        "display_image": req.files,
        "display_images":req.files,
        "display_logo":req.files
        
        
    }
    console.log("before store save")
    console.log(req.files)
    try{
      await Template.updateOne(
        { _id: id },
        { $push: { store:store }}
    )

    res.status(200).json({
        
        message:"store added successfully",
        result:store
        

    })

this is route :- router.post("/createStore/:tempid",verifyUser,upload.array('display_image display_images display_logo',maxCount=10), templateController.createStore)


Solution

  • I assume that display image,display images and display logo are in different fields. So you can use multer fields

    multer middleware

    upload.fields([
        {
            name: 'display_image', maxCount: 1
        },
        {
            name: 'display_images', maxCount: 1
        }, 
        {
            name: 'display_logo', maxCount: 1
        }
    ])
    

    controller

    const display_image = req.files && req.files.display_image ? req.files.display_image[0] : undefined;
        const display_images = req.files && req.files.display_images ? req.files.display_images[0] : undefined;
        const display_logo = req.files && req.files.display_logo ? req.files.display_logo[0] : undefined;