#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}) } };