node.js - 在 Express JS 中使用 Multer 根据扩展名过滤文件

标签 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");
        }
    });
});

我尝试在 onFileUploadStart 中回显某些内容以检查它是否进入该函数。但事实并非如此。除了onFileUploadStart,我还尝试了link 中提到的fileFilter ,但没有帮助。任何建议如何解决这个问题?提前致谢。

最佳答案

一个使用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');

摘自Node.js - File upload .原作者是 IcemanMikhail .归属细节可以在 contributor page 上找到。 .源在 CC BY-SA 3.0 下获得许可并且可以在 Documentation archive 中找到.引用主题 ID:4080 和示例 ID:14210。

关于node.js - 在 Express JS 中使用 Multer 根据扩展名过滤文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38652848/

相关文章:

javascript - 从 JSON 响应中的键名称中删除句点

mysql - 如何使用 MULTER、Nodejs 和 MySQL 发布表单数据(图像和数据)

javascript - 无法使用 Multer 获取文件属性

node.js - 在 Mongoose 中创建用户

Node.js:如何从抽象类中获取 'inherit'?

node.js - Mongoose 可选嵌套属性 - 检查空/未定义?

node.js - Express JS 4.x Multer 基本上传

node.js - Sails.js 计算位置

javascript - createRecord 将空 req.body 发送到我的 express.js 服务器后,Ember.js save()

javascript - "next(' 路线 ')"不 't work with ".use()"