NodeJS Multer is not working NodeJS Multer is not working express express

NodeJS Multer is not working


I don't see you calling any API to upload file on click of submit button. Let me give you more comprehensive implementation.

multer config in app.js

app.use(multer({     dest: './uploads/',    rename: function (fieldname, filename) {        return filename.replace(/\W+/g, '-').toLowerCase() + Date.now()    },    onFileUploadStart: function (file) {        console.log(file.fieldname + ' is starting ...')    },    onFileUploadData: function (file, data) {        console.log(data.length + ' of ' + file.fieldname + ' arrived')    },    onFileUploadComplete: function (file) {        console.log(file.fieldname + ' uploaded to  ' + file.path)    }}));

View

<form id="uploadProfilePicForm" enctype="multipart/form-data" action="/user/profile_pic_upload" method="post">          <input type="file" multiple="multiple" id="userPhotoInput" name="userPhoto"  accept="image/*" />          <input type="submit" name="submit" value="Upload"></form> 

End point '/user/profile_pic_upload' POST calls uploadProfilePic in controller

var control = require('../controllers/controller');app.post('/user/profile_pic_upload',control.uploadProfilePic);

Upload profile pic logic in users controller

uploadProfilePic = function(req,res){    // get the temporary location of the file    var tmp_path = req.files.userPhoto.path;    // set where the file should actually exists     var target_path = '/Users/narendra/Documents/Workspaces/NodeExpressWorkspace/MongoExpressUploads/profile_pic/' + req.files.userPhoto.name;    // move the file from the temporary location to the intended location    fs.rename(tmp_path, target_path, function(err) {        if (err) throw err;        // delete the temporary file, so that the explicitly set temporary upload dir does not get filled with unwanted files        fs.unlink(tmp_path, function() {            if (err) {                throw err;            }else{                    var profile_pic = req.files.userPhoto.name;                    //use profile_pic to do other stuffs like update DB or write rendering logic here.             };            });        });};


Try this

var multer = require('multer')var storage = multer.diskStorage({    destination: function (request, file, callback) {        callback(null, './uploads/');    },    filename: function (request, file, callback) {        console.log(file);        callback(null, file.originalname)    }});var upload = multer({ storage: storage });app.post('/', upload.single('photo'), function (req, res) {    console.log(req.body) // form fields    console.log(req.file) // form files    res.status(204).end()});

ref: http://wiki.workassis.com/nodejs-express-get-post-multipart-request-handling-example/