Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Multer: fileFilter not working

I'm using multer to upload files. everything is goung fine but fileFilter is not working. I've no idea where i'm going wrong.

routes.js

var multer = require('multer');
// Multer diskStorage setting
var storage = multer.diskStorage({
  destination: function (req, file, callback) {
    callback(null, './uploads/');
  },
  filFilter: function (req, file, cb) {
    var typeArray = file.mimetype.split('/');
    var fileType = typeArray[1];
    if (fileType == 'jpg' || fileType == 'png') {
      cb(null, true);
    } else {
      cb(null, false)
    }
  },
  filename: function (req, file, callback) {
    callback(null, file.fieldname + '_' + Date.now() + '.jpg');
  }
});

var upload = multer({ storage: storage });
router.post('/add', upload.single('photo'), function(req, res){

    console.log('uploaded');
}

Multer also uploads files other than allowed. Any idea?

like image 465
MUHAMMAD Siyab Avatar asked Dec 23 '22 10:12

MUHAMMAD Siyab


2 Answers

const storage = multer.diskStorage({
    destination: function (req, file, callback) {
        callback(null, './uploads/');
    },
    fileFilter: function (req, file, cb) {
        const extension = path.extname(file.originalname).toLowerCase();
        const mimetyp = file.mimetype;
        if (
            extension !== '.jpg' ||
            extension !== '.jpeg' ||
            extension !== '.png' ||
            mimetyp !== 'image/png' ||
            mimetyp !== 'image/jpg' ||
            mimetyp !== 'image/jpeg'
        ) {
            cb('error message', true);
        }
    },
    filename: function (req, file, callback) {
        callback(null, file.fieldname + '_' + Date.now() + '.jpg');
    },
});

const upload = multer({ storage: storage });
router.post('/add', upload.single('photo'), function (req, res) {
    console.log('uploaded');
});

i think this will help

like image 90
iLiA Avatar answered Jan 02 '23 04:01

iLiA


fileFilter must be defined in multer's options object rather than diskStorage

const uploadFilter = function(req, file, cb) {
    // filter rules here
}

const upload = multer({
    storage: storage,
    fileFilter: uploadFilter,
});
like image 37
keeri Avatar answered Jan 02 '23 05:01

keeri