将 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'
请记住,如果我不使用嵌套对象,对于我尝试 PATCH 的文件和字段,它都会按预期工作。问题似乎是 multer 认为我的 nestedObject
可能也是一个文件?事情是......嗯......不是,我只是希望它像 name
字段一样作为字段传递。
我错过了什么吗?我可以使用 FormData
发送嵌套对象的方法是什么?
尝试使用数组样式的名称:
data.append("nestedObject[nestedNestedObject1][name]", "Some other name");
data.append("nestedObject[nestedNestedObject2][name]", "Yet another name");
我需要对需要非常特定正文格式的服务器进行 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'
请记住,如果我不使用嵌套对象,对于我尝试 PATCH 的文件和字段,它都会按预期工作。问题似乎是 multer 认为我的 nestedObject
可能也是一个文件?事情是......嗯......不是,我只是希望它像 name
字段一样作为字段传递。
我错过了什么吗?我可以使用 FormData
发送嵌套对象的方法是什么?
尝试使用数组样式的名称:
data.append("nestedObject[nestedNestedObject1][name]", "Some other name");
data.append("nestedObject[nestedNestedObject2][name]", "Yet another name");