FormData добавить JSON - PullRequest
       38

FormData добавить JSON

0 голосов
/ 05 марта 2019

Как я могу создать следующий результат, используя FormData

------WebKitFormBoundaryOmz20xyMCkE27rN7
Content-Disposition: form-data; name="data";
Content-Type: application/json

{
  "description": "description"
}
------WebKitFormBoundaryOmz20xyMCkE27rN7
Content-Disposition: form-data; name="file"; filename="image.jpg"
Content-Type: image/jpeg


FILE_DATA
------WebKitFormBoundaryOmz20xyMCkE27rN7

Я использую

const formData = new FormData();
const data = new Blob([JSON.stringify({
        description: 'description',
      })], {
        type: 'application/json'
      });
formData.set('data', data);
formData.set('file', file);

, он генерирует

------WebKitFormBoundaryOmz20xyMCkE27rN7
Content-Disposition: form-data; name="data"; filename="blob"
Content-Type: application/json

{
  "description": "description"
}
------WebKitFormBoundaryOmz20xyMCkE27rN7
Content-Disposition: form-data; name="file"; filename="image.jpg"
Content-Type: image/jpeg


FILE_DATA
------WebKitFormBoundaryOmz20xyMCkE27rN7

Как вы можете видеть, мы имеемfilename="blob" в части JSON, я хочу удалить его

Я хочу, чтобы в моих многокомпонентных данных было поле data, а не data файл

1 Ответ

0 голосов
/ 13 марта 2019

Когда вы делаете

new Blob([JSON.stringify({
    description: 'description',
  })], {
  type: 'application/json'
})

На самом деле вы генерируете это файл, текстовый файл UTF-8, содержимое которого будет {description:'description} закодировано в UTF-8.

Таким образом, когда вы добавляете их в свои FormData, они передаются в виде файла, с одной особенностью, которую вы установили для Content-Type равным application/json.

Если вы хотите отправитьэти данные как часть данных формы в виде обычного текста, которые ваш сервер сможет анализировать непосредственно из данных post, а затем просто добавить вашу строку в качестве ключа ваших FormData:

const data = JSON.stringify({
  description: 'description',
})
const fd = new FormData();
// append directly as part of the postData in plain text
fd.append('data', data);

console.log(...fd); // [key, value]
...