Illep
Illep

Reputation: 16851

Multer gives req.file undefined

I am trying to upload a file using multer. Here's the code:

HTML

<form action="/" method="post" encrypt="multipart/form-data" >
      <input  name="upl"  type="file" ></br>
      <input  type="text" name="onenee" ></br>
      <input type="submit" value="submit" />

</form>

NODE JS

var express = require('express');
// var csrf = require('csurf');
var passport = require('passport');
var Product = require('../models/product');
var multer  = require('multer');
var upload = multer({ dest: 'public/uploads/' });

var router = express.Router();

router.post('/', upload.single('upl'), function (req, res, next) {
        console.log(' Field name1 '+ req.body.onenee);
        console.log(' Field name2 '+ req.files);
        console.log(' Field name3 '+ req.file);
        res.send(req.file);
});

OUTPUT I GET FROM THE CONSOLE

Field name1 hi

Field name2 undefined

Field name3 undefined

POST / 200 15.536 ms - -

Upvotes: 3

Views: 3454

Answers (2)

Jerry
Jerry

Reputation: 1

Do not use:

cb(null, file.fieldname + '-' + Date.now() + '.' + ext);

Instead of use this below code

cb(null, Date.now() + '.jpg');

Upvotes: 0

Jonathan Nielsen
Jonathan Nielsen

Reputation: 1502

Your form attribute is incorrect, change encrypt to enctype instead. Your file will be available through req.file

UPDATE:
Rename your file with extension:

var storage = multer.diskStorage({
        destination: function(req, file, cb) {
            cb(null, './public/uploads/'); // Make sure this folder exists
        },
        filename: function(req, file, cb) {
            var ext = file.originalname.split('.').pop();
            cb(null, file.fieldname + '-' + Date.now() + '.' + ext);
        }
    }),
    upload = multer({ storage: storage }).single('upl');

router.post('/', upload, function (req, res, next) {
        console.log('body', req.body);
        console.log('file', req.file);
});

Upvotes: 4

Related Questions