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
Multer doc : https://www.npmjs.com/package/multer
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
Post a Comment