首页 > 解决方案 > 是否可以发送内容类型为 multipart/form-data(文件)的 Http post 请求和带有数据参数的 json 对象?

问题描述

我想允许用户上传文件。他们可以设置标题、到期日期,并且可以从最后选择文件数量,然后单击上传按钮并将其全部发送到服务器。

然后我插入一个新文档,其中包含他们发送的详细信息以及处理他们附加的文件的保存。

以下是插入文档的示例:

// documents collections: 
{
  title: "Some contract",
  expiration_date: DATE,
  files: [
    "uploads/1.jpg",
    "uploads/1.docx",
    "uploads/1.pdf"
  ]
}

我能够允许用户使用强大的 node.js 模块成功发送和上传这些文件。

我能够允许用户使用正文解析器发送数据参数,然后在req.body对象中访问它们。

但是,我不能在同一个请求中同时拥有它们。

是什么让我认为我需要允许在单个请求中上传,然后将其文件(路径)返回给客户端,然后使用 json 对象参数发送另一个 http post 请求。

但这似乎太复杂了。但是让用户先上传文件,在上传文件的同时,他可以继续填写表格,这也是一件好事。

标签: javascriptnode.jsangularjsmultipartform-databody-parser

解决方案


您不能在同一个请求中发送这两种类型,因为其中一种具有标头Content-Type: multipart/form-data,而 json 请求具有标头Content-Type: application/json。您可以通过使用多部分表单数据、将您的 json 字符串化并将其添加为文本字段来解决这个问题,但我强烈建议您不要这样做。
多部分表单数据确实支持将多个文件添加到请求表单中的单个键


推荐阅读