Добавление вложенного объекта FormData вместе с файлом - PullRequest
0 голосов
/ 28 февраля 2019

Мне нужно сделать 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?Я видел в другой ветке предложение, чтобы я делал каплю.Что должно быть примерно так:

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'

Имейте в виду, что если я не использую вложенный объект, он все работает как ожидалось, для обоихфайл и поля, которые я пытаюсь найти.Кажется, проблема в том, что Мултер считает, что мой nestedObject, возможно, также является файлом?Дело в том ... Ну ... Это не так, я просто хочу, чтобы оно передавалось как поле типа name.Я что-то пропустил?Как я могу отправить вложенный объект, используя FormData?

1 Ответ

0 голосов
/ 28 февраля 2019

Попробуйте использовать имена в стиле массива:

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