J’ai réussi à faire fonctionner cela de cette manière :
import Axios from "axios";
import FormData from "form-data";
import fs from "fs";
const http = Axios.create({
baseURL: "https://forum.zeebe.io",
headers: {
"Api-Key":
"...",
"Api-Username": "...",
"Content-Type": "application/json",
Accept: "application/json",
},
});
http.interceptors.request.use((config) => {
if (config.data instanceof FormData) {
Object.assign(config.headers, config.data.getHeaders());
}
return config;
});
const filename = "/Users/sitapati/Desktop/process.png";
const file = fs.readFileSync(filename);
const form = new FormData();
form.append("files[]", file, {
filename,
});
http
.post("/uploads.json", form, {
params: {
type: "composer",
synchronous: true,
},
})
.then(({ data }) => {
console.info("Réponse de Discourse", JSON.stringify(data, null, 2));
return {
url: data.url,
};
})
.catch((e) => {
console.error(
"Erreur lors du téléchargement du fichier vers Discourse",
JSON.stringify(e, null, 2)
);
throw e;
});
Cela fonctionne également avec un fichier récupéré depuis une URL distante, ce qui doit être fait de cette manière :
Axios.get(file.slackUrl, {
responseType: "arraybuffer",
headers: { Authorization: "Bearer " + this.slackToken },
})
L’élément clé ici est : responseType: "arraybuffer".