multer 上的 fileFilter 仍然允许所有文件类型

Posted

技术标签:

【中文标题】multer 上的 fileFilter 仍然允许所有文件类型【英文标题】:fileFilter on multer still allowing all file types 【发布时间】:2020-11-29 18:51:16 【问题描述】:

在我的存储功能中添加了一个文件过滤器,只允许上传图像文件类型,但所有文件类型仍在上传中。

var storage = multer.diskStorage(
    destination: function (req, file, cb) 
        cb(null, 'uploads/profilePictures')
    ,
    filename: function (req, file, cb) 
        cb(null, `$Date.now()_$file.originalname`)
    ,
    fileFilter: (req, file, cb) => 
        const ext = path.extname(file.originalname).toLower()
        if (ext !== '.jpg' || ext !=='.png' || ext !== '.jpeg') 
            return cb(res.status(400).end('Error only photos can be uploaded'), false);
        
        cb(null,true)
    
)

var upload = multer( storage: storage ).single("file")

【问题讨论】:

这能回答你的问题吗? Filter files on the basis of extension using Multer in Express JS 【参考方案1】:

这是一种使用正则表达式的方法:

fileFilter: (req, file, cb) => 
    const filetypes = /jpeg|jpg|png|gif/;
    const extname = filetypes.test(path.extname(file.originalname).toLowerCase());
    const mimetype = filetypes.test(file.mimetype);
    
    if (mimetype && extname) return cb(null, true);
    else cb("Error: Images Only!");

【讨论】:

以上是关于multer 上的 fileFilter 仍然允许所有文件类型的主要内容,如果未能解决你的问题,请参考以下文章

当我在 multer 中使用文件过滤器时如何捕捉错误?

如何允许 fs 和 multer 在 AWS EC2 上写入文件

NodeJs如何将Multer Buffer保存到系统上的文件中

multer处理post请求的代码演示

Multer 没有将文件上传到服务器

简单的 JFileChooser FileFilter 不起作用