You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何返回multer的fileFilter过滤后的文件?req.files为空如何解决?

问题原因

你编写的extFilter函数存在逻辑漏洞:当文件扩展名匹配规则时,虽然执行了cb(null, true),但函数没有终止执行,后续的cb(null, false)会被再次调用,相当于无论文件是否符合要求,最终都会被判定为过滤,所以req.files返回空数组。

解决方法

在cb(null, true)之后加return终止函数执行,或者调整为if...else分支结构,保证每个文件只会触发一次回调判断:

const extFilter = function (req, file, cb) {
    if(file.originalname.match(/^.*\.(avi|mov|mp4)$/)) {
        return cb(null, true)
    }
    cb(null, false)
}

也可以简化为更清晰的写法:

const extFilter = function (req, file, cb) {
    const isExtValid = /^.*\.(avi|mov|mp4)$/.test(file.originalname)
    cb(null, isExtValid)
}

调整后符合扩展名要求的文件会被正常保留,req.files就能正确返回上传成功的文件数组。

内容的提问来源于stack exchange,提问作者golder3

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 17:06:03