首页 > 解决方案 > 如何返回已经被multer filefilter过滤的文件?

问题描述

我正在尝试实现multerfileFilter 功能并且它可以工作(它确实过滤文件并且文件被上传)但是当我设置文件过滤req.files时变为空。

const extFilter = function (req, file, cb) {

    if(file.originalname.match(/^.*\.(avi|mov|mp4)$/)) cb(null, true)
    
    cb(null, false)
  
}

const upload = multer({ storage: cloudStorage, 
                        fileFilter: extFilter }).array('file')

upload(req, res, function (err) {   
                return res.status(200).send(req.files) //returns nothing
              })

如果没有设置 fileFilter 选项,该函数将返回上传文件的数组。

有任何想法吗?

标签: javascriptnode.jsmulter

解决方案


fileFilter 函数之前缺少返回cb(null, true)

const extFilter = function (req, file, cb) {

    if(file.originalname.match(/^.*\.(avi|mov|mp4)$/)) return cb(null, true)
    
    cb(null, false)
  
}

否则,由于第一个回调,文件被写入磁盘,但req.files由于第二个回调,没有返回任何内容cb(null, false)


推荐阅读