【问题标题】:Multipart/form-data with arrays带数组的多部分/表单数据
【发布时间】:2014-07-03 15:54:29
【问题描述】:

我有一个简单的表格:

<form method="post" action="/test">
  <input type="hidden" name="arr[]" value="val1">
  <input type="hidden" name="arr[]" value="val2">
  <input type="hidden" name="arr[]" value="val3">
  <input type="submit" value="Submit">
</form>

使用控制器:

//...
server.post('/test', function(req, res) {
    res.json(req.body);
});
//...

这会很好地返回:

{
  arr: [
    "val1",
    "val2",
    "val3"
  ]
}

但是,当我将 enctype 更改为 multipart/formdata 时

<form method="post" action="/test" enctype="multipart/form-data">
  <input type="hidden" name="arr[]" value="val1">
  <input type="hidden" name="arr[]" value="val2">
  <input type="hidden" name="arr[]" value="val3">
  <input type="submit" value="Submit">
</form>

服务器现在响应:

{
  arr[]: "val3"
}

有什么问题?有什么我需要的配置吗?

如果您想知道,我还发送了一个文件,这就是我需要 multipart/form-data 的原因。

【问题讨论】:

  • 看起来更像是多方无法正确处理这种情况。有兴趣看看结果如何。如果您没有找到解决方案,请尝试通过以下方式报告:github.com/andrewrk/node-multiparty/issues
  • 您发现问题所在了吗?我这里也有同样的问题
  • 数组语法是对表单语法的非标准扩展。您的 url 编码数据的正文解析器可以识别它,但您的多部分数据的正文解析器没有。您没有提供minimal reproducible example,所以我们不知道您使用的是什么正文解析器,所以我们无法判断是因为没有支持还是只需要启用支持。

标签: node.js express kraken.js


【解决方案1】:

这可能与使用body-parser(尤其是urlencoded 方法)有关,by default 仅适用于媒体类型为application/x-www-form-urlencoded 的请求。

您的主应用程序模块可能有如下几行:

const bodyParser = require('body-parser');
app.use(bodyParser.urlencoded());

我想,您可以添加以下内容来解析multipart/form-data 类型的请求:

app.use(bodyParser.urlencoded({
  type: 'multipart/form-data'
}));

【讨论】:

  • multipart 语法与 urlencoded 语法完全不同。您不能将一个解析器用于另一个。
  • 哎呀,我的错!但是 body-parser 没有 multipart 语法,您需要一个专用模块来处理 multipart 请求,如 busboy 或 multer,如 body-parser 文档中所述。
  • 他们已经在使用一个(否则他们不会得到他们所说的结果),但我们不知道是哪个。
  • 只是一个疯狂的猜测:这个问题被标记为kraken.js,所以它可能是formidable。我认为,他们在第一个示例中看到的结果可以归因于使用了 body-parser 的 { extended: true } 标志。
猜你喜欢
  • 1970-01-01
  • 2014-11-02
  • 1970-01-01
  • 2018-12-06
  • 1970-01-01
  • 2017-10-26
  • 2020-09-03
  • 1970-01-01
  • 2013-03-06
相关资源
最近更新 更多