Создание данных формы без использования FormData в node-fetch

  • Я использую выборку узла для выполнения вызовов API внутри платформы.
  • Мне нужно сделать вызов API для передачи файла в form-data.
  • Ниже мой код-заглушка:
const fetch = require("node-fetch")
var myHeaders = {"Authorization": "Basic Y2hhdEJvdDpJRkxjYkAxMjM="
,'cache-control': 'no-cache'
,"content-type": "multipart/form-data;"
};

let file_content = "base 64 file content";

let getFormDataForWhatsAppStatement = (data,fileContent,fileExt)=>{
  let jsonData = { "data":{ "templateName":"Test_123", "fieldName":"Document_Purpose,Policy_Number,Document_Category", "fieldValue":`AttachDocument, ${data.policyNumber}, Customer_Requirement`, "docList":"Test_Doc" } }
  let formDataPairs = [];
  let finalFormData = '';

  formDataPairs.push(encodeURIComponent("") + '=' + encodeURIComponent(jsonData));
  formDataPairs.push(encodeURIComponent("") + '=' + encodeURIComponent(fileContent));

  finalFormData = formDataPairs.join('&').replace(/%20/g, '+');

  return finalFormData;
}

let formdata = getFormData({"policyNumber":"006558144"},file_content,"png");

var requestOptions = {
  method: 'POST',
  headers: myHeaders,
  body: formdata
};


fetch(url, requestOptions)
  .then(response => response.json())
  .then(result => console.log(result))
  .catch(error => console.log('error', error));
  • Ошибка, которую я получаю, заключается в том, что граничный параметр не определен.
  • Поэтому я удалил заголовок типа контента, как указано в приведенной ниже теме: Boundary Проблема

  • Но затем он выдает ошибку тайм-аута соединения (поскольку формат запроса неверен).

  • Итак, есть ли способ создать formData, аналогичный приведенному ниже коду, без использования объекта FormData?

const FormData = require('form-data');
const fetch = require("node-fetch")
var formdata = new FormData();
var myHeaders = {"Authorization": "Basic Y2hhdEJvdDpJRkxjYkAxMjM="
//,"Content-Type": "multipart/form-data; boundary=----WebKitFormBoundaryyEmKNDsBKjB7QEqu"
};

formdata.append("", "{ \n   \"data\":{ \n\n      \"templateName\":\"Test_123\",\n      \"fieldName\":\"Document_Purpose,Policy_Number,Document_Category\",\n      \"fieldValue\":\"AttachDocument, G0000784, Customer_Requirement\",\n      \"docList\":\"Test_Doc\"  \n}\n}\n");
formdata.append("", "base 64 file data", "close.png");
var requestOptions = {
  method: 'POST',
  headers: myHeaders,
  body: formdata,
  redirect: 'follow'
};

fetch(API_URL, requestOptions)
  .then(response => response.text())
  .then(result => console.log(result))
  .catch(error => console.log('error', error));

person Avinash    schedule 02.03.2020    source источник


Ответы (1)


Вместо того, чтобы буквально вводить границу, вы попытались использовать функцию данных формы getBoundary() и назначить ее переменной следующим образом:

let boundary = formdata.getBoundary();
var myHeaders = {"Authorization": "Basic Y2hhdEJvdDpJRkxjYkAxMjM="
"Content-Type": `multipart/form-data; boundary=${boundary}`
};
person Nick Winter-Taia    schedule 13.03.2020