繁体   English   中英

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

[英]Appending FormData nested object along with a file

我需要对服务器进行PATCH,该服务器需要非常特定的主体格式。 像这样:

{
  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");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM