lch
lch

Reputation: 4931

multer file upload not working

routes.js

module.exports=function(app, upload){

        var postingsController=require('../controllers/postings.server.controller');

        app.post('/postings', postingsController.savePosting);

    }

controller.js

var multer=require('multer');

    exports.savePosting=function(req, res, next){

      // this diskstorage function is not at all executed
        var storage = multer.diskStorage({
            destination: function (req, file, cb) {
                cb(null, './uploads')
            },
            filename: function (req, file, cb) {
                console.log(file);
                cb(null, file.filename + '.' + 'jpg');
            }
        });

        var upload = multer({ storage: storage });
        upload.single('attachment');

        res.json({ message: "success" });

    }

can someone tell me which line exactly uploads file. DO i write multer diskstorage configuration in main express configuration file or can i write any where. By the way i able to see json response which is from the line

Upvotes: 0

Views: 791

Answers (2)

NikxDa
NikxDa

Reputation: 4187


Multer is a middleware, which means it is added as a parameter to your route in most cases. So what the actual syntax would be like is:
app.post ("/postings", multer ({ ... }), postingsController.savePosting);
Multer gets called inbetween the request to "/postings" and the final function to do all the file work for you. It will then provide you with all the information via
req.files["fileInputName"]
in the following middlewares (your function is a "middleware", too).

Upvotes: 0

mscdex
mscdex

Reputation: 106696

Typically the middleware is created and inserted outside of any actual route handlers. For example:

routes.js

var multer = require('multer');

var storage = multer.diskStorage({
  destination: function (req, file, cb) {
    cb(null, './uploads')
  },
  filename: function (req, file, cb) {
    console.log(file);
    cb(null, file.filename + '.' + 'jpg');
  }
});
var upload = multer({ storage: storage });

module.exports = function(app, upload) {
  var postingsController = require('../controllers/postings.server.controller');

  app.post('/postings',
           upload.single('attachment'),
           postingsController.savePosting);
};

controller.js

exports.savePosting = function(req, res, next) {

  // Use `req.file` to access attachment

  if (req.file)
    res.json({ message: "success" });
  else // no file uploaded
    res.json({ message: "failure" });
};

Upvotes: 1

Related Questions