为什么 Express Multer 要求输入字段名称与传递给中间件的字符串相同?



来自文档:
Fronend

<form action="/profile" method="post" enctype="multipart/form-data">
<input type="file" name="avatar" />
</form>

后端:

var upload = multer({ dest: 'uploads/' })
app.post('/profile', upload.single('avatar'), function (req, res, next) {
// req.file is the `avatar` file
// req.body will hold the text fields, if there were any
})

我之前已经成功地使用 Multer 实现了文件上传。但是,现在我遇到了一个问题,我发送了一个包含一些信息的对象以及文件,而不仅仅是文件。所以我一直在努力理解这是怎么回事:

upload.single('avatar')

工程。除了传递的字符串必须与字段输入名称相同这一事实之外,网上似乎没有任何解释,如果有的话,这会使整个事情更加混乱。

假设您有一个包含 3 个字段的表单:

  • 名称(文本(
  • 电子邮件(文本(
  • 照片(文件(

当以 json 格式发送此表单时,Nodejs 将收到如下数据:

"{"name": "value", "email": "value", "photo": "[binary]"}"

目前为止,一切都好。在这里,multer可以很容易地知道要解析的字段是"照片"。

现在想象一下,由于某些原因,您的后端要求您在发送表单之前将所有输入值解析为二进制。现在,您必须转换输入表单并按如下方式发送:

"{"name": "[binary]", "email": "[binary]", "photo": "[binary]"}"

Multer:"好的,我有 3 个二进制字段,我应该将哪一个转换为文件?

最新更新