#node.js #axios #multer
Вопрос:
Я использую API, когда я отправляю файл по этой ссылке, он отвечает на файл, преобразованный в меня. Я пробую 2 способа попрактиковаться с ним. Я просто использую элемент ввода для выбора файла, который необходимо преобразовать. Во-первых, я разрешаю клиенту напрямую использовать этот API, я получаю этот файл e.target.files[0]
и добавляю это значение в a FormData
, затем отправляю его с помощью глагола post HTTP в API, чтобы я мог преобразовать файл из API без ошибок. Это console.log(e.target.files[0])
.
И FromData
и axios, которые я использую для поста:
const form = new FormData();
form.append('file', e.target.files[0]);
const res = await axios.post('API', form, {
headers: {
'Content-Type': 'multipart/form-data'
}
});
Во-вторых, я не хочу, чтобы клиент напрямую использовал этот API, я пишу прокси-сервер, позволяю клиенту отправлять запрос на прокси-сервер, а прокси — сервер отправляет запрос post в API. Клиент отправляет файл на прокси-сервер так же, как и выше. Прокси — сервер использует мультер для получения файла из req.file
:
app.post('/upload', upload.single('file'), async (req, res) => {
const file = req.file;
console.log('req file', file);
И req.file
я получаю это:
После того , как прокси-сервер получит req.file
, он отправит этот файл в API через axios и FormData
:
const form_data = new FormData();
form_data.append("TasksConversion", JSON.stringify(file));
const res1 = await axios.post('API', form_data, {
headers: {
'Content-Type': 'multipart/form-data',
...form_data.getHeaders()
}
});
Но теперь запрос через ошибку:
Запрос не выполнен с кодом состояния 500… данные: «Последовательность не содержит элементов».
API принимает только FormData
подобное e.target.files[0]
. Поэтому я думаю, что в этом разница между req.file
и e.target.files[0]
. Или как я могу получить файл с прокси-сервера, например e.target.files[0]
.