Multer file upload and delete - Nodejs, Mongodb, Express

Multer is a node.js middleware which is primarily used for uploading files.

Dependencies

    "express": "^4.17.1",
    "mongoose": "^6.0.9",
    "multer": "^1.4.3


Middleware

required : Path and Multer


Folder to upload file and name of a file.
const storage = multer.diskStorage({
    destination: function (req, file, cb) {
        cb(null, path.join(__dirname, '../uploads')) //upload file in uploads folder
      },
      filename : function (req, file, cb){
        const uniquePrefix = Date.now() + '-' + Math.round(Math.random() * 1E9)
        cb(null, uniquePrefix + '-' + file.originalname)  //uploaded file name
    }
})


Filter file types 
const fileFilter = (req, file, cb) => {
    // The function should call `cb` with a boolean
    // to indicate if the file should be accepted
 
     // To accept the file pass `true`, like so:
    if(file.mimetype == "image/jpeg"|| file.mimetype == "image/png"){
        cb(null, true)
    } else {
        cb(null, false)
    }
  }


module.exports = multer({
    storage : storage,
    fileFilter : fileFilter,
    limits : {
        filesize : {
            filesize : 1024 * 1024 * 5 //5MB file upload limit
        }
    }
})


Upload file : CRUD controller

Use 'userProfile' as key to upload field not profile_pic.
'req.file.path' for file

router.post("/", upload.single('userProfile') , async function (req, res){
   const user = await User.create({
      first_name : req.body.first_name,
      last_name : req.body.last_name,
      profile_pic : req.file.path   //file.path
   })
   
   return res.status(201).send(user)
})

Delete file : CRUD controller

To delete file from server or directory 
const fs = require('fs');

fs.unlink(path, '(err)=>{}')
router.delete("/:id", async(req, res)=>{
   const data = await User.findById(req.params.id) //find by id
   await fs.unlink(data.profile_pic, (err => { //delete file from directory
      if (err) console.log(err);
      else {
        console.log("file deleted");
      }
    }))

   const user = await User.findByIdAndDelete(req.params.id) //delete user by id
   return res.send(user)
})





Comments

Popular posts from this blog

Money Management

Sub array quest IX