Отправить файл из HTML-формы во внешний API (как сделать файл curl=@… в node fetch/axios)

#node.js #axios #fetch-api #rest #netlify-function

Вопрос:

Мне нужно отправить файл из HTML-формы на странице

 lt;input id="file" name="file" type="file" data-file-accept="pdf" data-component="fileupload"gt;  

к внешнему API, где параметр файла выглядит следующим образом:

 Parameter name: file Example values: @file_name.jpg;type=image/jpeg Description: Filename with filepath  

с приведенным примером завитка:

 curl -X POST "..."  -H "accept: application/json"  -H "Authorization: Bearer mytoken1234"  -H "Content-Type: multipart/form-data"  -F "file[file]=@test.pdf;type=application/pdf"  -F "dictionary_file_type=CV"  -F "file[isPublic]=1"  

Страница представляет собой страницу Jamstack, без стандартного сервера, единственным «внутренним» вариантом являются бессерверные функции AWS lambda (точнее, функции Netlify, написанные в узле). Есть ли способ отправить этот файл с помощью узла.принести или аксиос? Или другие инструменты, применимые здесь?

Может быть, примеры рабочих функций, которые я имею в виду выше, помогут:

аксиос

 const axios = require("axios"); const FormData = require("form-data"); const form = new FormData();  form.append("client_id", "...") form.append("client_secret", "...") ... // rest of data  exports.handler = async (event) =gt; {  try {  const res = await axios.post(url, form, { headers: ... });  return { statusCode: 200, body: JSON.stringify(res) };  } catch (err) {  return { statusCode: 400, body: JSON.stringify(err.message) };  } };  

узел.извлечь

 const fetch = require('node-fetch');  const myHeaders = new fetch.Headers(); myHeaders.append(...);  exports.handler = async (event, context) =gt; {  let response;   const data = { name: "New", lastname: "Candidate" };   const requestOptions = {  method: 'POST',  headers: myHeaders,  body: JSON.stringify(data)  };   try {  response = await fetch(endpoint, requestOptions)  .then(response =gt; response.json())  .then(data =gt; console.log(data))  .catch((err) =gt; console.log(err);  } catch (err) {  return { statusCode: 500, body: JSON.stringify({error: err.message}) };  }  return { statusCode: 200, body: JSON.stringify({data: res}) } };