使用Express JS中的Multer在扩展的基础上过滤文件

A J*_*A J 9 node.js express multer

正如问题标题所解释的,我需要根据文件扩展名过滤上传的文件.所以,我浏览了官方文档并搜索了这个网站.

我试过的

我尝试过遇到的解决方案.文件正在成功上传,但问题是如何过滤文件.目前我的Router.js文件看起来像这样.

Router.JS

var multer  = require('multer');
var storage = multer.diskStorage({ //multers disk storage settings
    destination: function (req, file, cb) {
        cb(null, './public/uploads/')
    },
    limits:{
        files: 1,
        fileSize: 1024 * 1024
    },
    filename: function (req, file, cb) {
        var datetimestamp = Date.now();
        cb(null, file.fieldname + '-' + datetimestamp + '.' + file.originalname.split('.')[file.originalname.split('.').length -1])
    },
    onFileUploadStart: function(file) {
        console.log("Inside uploads");
        if (file.mimetype == 'image/jpg' || file.mimetype == 'image/jpeg' || file.mimetype == 'image/png') {
            return true;
        }
        else
        {
            return false;
        }
    }
});
var upload = multer({ //multer settings
    storage: storage
}).single('profilepic');


router.post('/profile', function(req, res){
    upload(req,res,function(err){
        if(err)
        {
            console.log(err);
        }
        else
        {
            console.log("Image was uploaded");
        }
    });
});
Run Code Online (Sandbox Code Playgroud)

我尝试回应一些东西onFileUploadStart来检查它是否进入该功能.事实并非如此.此外onFileUploadStart,我也尝试过fileFilter这个链接,但没有帮助.有什么建议如何解决这个问题?提前致谢.

A J*_*A J 24

使用示例multer:

var storage = multer.diskStorage({ //multers disk storage settings
    destination: function (req, file, cb) {
        cb(null, './public/uploads/')
    },
    filename: function (req, file, cb) {
        var datetimestamp = Date.now();
        cb(null, file.fieldname + '-' + datetimestamp + '.' + file.originalname.split('.')[file.originalname.split('.').length -1])
    }
});

var upload = multer({ //multer settings
    storage: storage,
    fileFilter: function (req, file, callback) {
        var ext = path.extname(file.originalname);
        if(ext !== '.png' && ext !== '.jpg' && ext !== '.gif' && ext !== '.jpeg') {
            return callback(new Error('Only images are allowed'))
        }
        callback(null, true)
    },
    limits:{
        fileSize: 1024 * 1024
    }
}).single('profilepic');
Run Code Online (Sandbox Code Playgroud)

摘自Node.js - 文件上传.最初的作者是冰人米哈伊尔.归因详细信息可在贡献者页面上找到.源是根据CC BY-SA 3.0许可的,可以在文档存档中找到.参考主题ID:4080和示例ID:14210.