Я пытаюсь перенаправить изображение из реакции на внешний API (Jira) через Express. При работе непосредственно в Jira formData передается правильно и изображение обновляется.
При прохождении через express мой API сообщает мне, что файл не предоставлен. Я предполагаю, что это скорее плохой формат.
Вот код реакции, выполняющий вызов обновления изображения:
export const updateImage = (id, file) => {
let formData = new FormData();
formData.append('file', file);
return axios.post(global.api.url(`/${id}/avatar`), formData, {
headers: {
'Content-Type': 'multipart/form-data'
}
});
};
А вот часть моего express сервера:
const express = require('express');
const cors = require('cors');
const path = require('path');
const axios = require('axios');
const os = require('os');
const formData = require('express-form-data');
const bodyParser = require('body-parser');
let app = express();
const options = {
uploadDir: os.tmpdir(),
autoClean: true
};
app.use(formData.parse(options));
app.use(formData.format());
app.use(formData.stream());
app.use(formData.union());
app.use(cors());
app.options('*', cors());
app.use(bodyParser.json());
app.use('/jira/rest', function (req, res, next) {
req.headers['X-Atlassian-Token'] = 'no-check';
next();
});
app.post('/jira/rest/**/avatar', (req, res) => {
const url = 'http://localhost:6000' + req.url;
axios
.post(url, req.body, { headers: req.headers })
.then((axiosResponse) => {
res
.set('content-type', axiosResponse.headers['content-type'])
.send(JSON.stringify(axiosResponse.data));
})
.catch((error) => {
res
.status(error.response.status)
.send(JSON.stringify(error.response.data.errors));
});
});
Я пробовал другой подход с multer , который успешно декодировал мой req.file
, но, похоже, это неправильный формат для перехода к ax ios для Jira Api.
Я вижу вызов, сделанный в серверную часть, и я получаю сообщение об ошибке 400 о том, что изображение не было предоставлено.
Поскольку я использую комбинацию express-form-data
и req.body
в качестве второй параметр моего axios.post
, я предполагаю, что формат неправильный.
Я также могу подтвердить, что заголовок правильно установлен на multipart/form-data
Любая помощь приветствуется!