javascript - 将 FormData 嵌套对象与文件一起附加

标签 javascript multipartform-data multer form-data

我需要对服务器进行修补,该服务器需要非常特定的正文格式。像这样的事情:

{
  file: MY_FILE_OBJECT
  name: 'Name',
  nestedObject: {
    nestednestedObject1: {
      name: 'Some other name'
    },
    nestednestedObject2: {
      name: 'Yet another name'
    },
  }
}

因为我需要能够传入一个文件,所以我必须将其放入 FormData 对象。因此,对于主要字段,形成请求正文非常好且容易

const data = new FormData()
data.append('file', file, file.name)
data.append('name', 'Name')

但是,我该如何执行嵌套的 translation 对象呢?我在另一个线程中看到了我做一个 blob 的建议。应该是这样的:

const fullPatchObject = {
  nestedObject: {
    nestednestedObject1: { name: 'Some other name' }
    nestednestedObject2: { name: 'Yet another name' }
  }
}
const blob = new Blob([JSON.stringify(fullPatchObject)], { type: 'application/json' })
data.append('nestedObject', blob)

但这不起作用。我在服务器中使用 multer 来处理文件,并收到以下错误对象:

name: 'MulterError',
message: 'Unexpected field',
code: 'LIMIT_UNEXPECTED_FILE',
field: 'nestedObject'

请记住,如果我不使用嵌套对象,对于我尝试修补的文件和字段,一切都会按预期工作。问题似乎是 multer 认为我的 nestedObject 可能也是一个文件?问题是......嗯......事实并非如此,我只是希望它像 name 字段一样作为字段传递。 我错过了什么吗?使用 FormData 发送嵌套对象的方法是什么?

最佳答案

尝试使用数组样式名称:

data.append("nestedObject[nestedNestedObject1][name]", "Some other name");
data.append("nestedObject[nestedNestedObject2][name]", "Yet another name");

关于javascript - 将 FormData 嵌套对象与文件一起附加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54914593/

相关文章:

javascript - 使用 jquery 重新加载 div 元素

javascript - 将包含文件和字符串值的对象追加到 FormData - JS

http - 是否有 HTTP 验证器来显示我的供应商的 API 是否创建了格式错误的 POST?

node.js - Multer 限制接受的图像

node.js - 关于使用Multer(1.0.6)和Express上传文件

javascript - jquery 表单验证未触发/工作

javascript - Nodejs telnet登录无法输入密码

javascript - mocha 和 chai 测试用例中的 promise 失败

javascript - 使用 xhr 上传文件时在哪里以及如何设置正确的编码

javascript - Vue.js/Nginx/Node.js - 413 请求实体太大