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

如何在Multer自定义存储引擎前获取表单字段?

问题:Multer 表单字段解析与自定义存储引擎的顺序冲突

我当前使用 Multer 搭配自定义存储引擎实现文件上传,目标路径由请求指定。目前是从查询参数中获取 destination 及其他参数,但希望将所有输入数据整合到表单数据中。同时该目标路径需要额外验证,且验证逻辑需访问 res 和 next。

当前实现代码如下:

upload(req, res, next) {
    // 理想情况下应为`req.body.destination`;
    const destination = req.query.destination;
    
    /* 验证逻辑... */

    return multer({
        storage: new CustomStorage(destination),
    }).single('file')(req, res, next);
}

但存在核心矛盾:Multer 必须先运行才能将表单数据解析到 req.body,这与我需要先验证 destination 的顺序需求冲突。

我尝试在存储引擎前运行第二个 Multer 实例——忽略文件,仅解析文本字段到 req.body,代码如下:

multer({
    fileFilter: (req, file, cb) => { return cb(null, false); },
}).any();

运行后虽能访问 req.body 中的表单数据,但出现如下错误:

Error: Unexpected end of form
    at Multipart._final (/Users/robert/bucket/node_modules/busboy/lib/types/multipart.js:588:17)
    at callFinal (node:internal/streams/writable:694:27)
    at prefinish (node:internal/streams/writable:723:7)
    at finishMaybe (node:internal/streams/writable:733:5)
    at Multipart.Writable.end (node:internal/streams/writable:631:5)
    at onend (node:internal/streams/readable:693:10)
    at processTicksAndRejections (node:internal/process/task_queues:78:11) {
  storageErrors: []
}

查阅相关 issue 后降级到 Multer 1.4.3,错误虽消除,但 API 路由直接返回 400 状态码,且无任何错误信息。

请问这种场景下该如何正确获取表单字段?

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 19:36:20