web-dev-qa-db-fra.com

envoi de fichier et json dans POST demande multipart / form-data avec axios

J'essaie d'envoyer un fichier et un json dans la même demande multipart POST à mon point de terminaison REST. La demande est faite directement à partir de javascript en utilisant la bibliothèque axios comme indiqué dans la méthode ci-dessous.

doAjaxPost() {
    var formData = new FormData();
    var file = document.querySelector('#file');

    formData.append("file", file.files[0]);
    formData.append("document", documentJson);

    axios({
        method: 'post',
        url: 'http://192.168.1.69:8080/api/files',
        data: formData,
    })
    .then(function (response) {
        console.log(response);
    })
    .catch(function (response) {
        console.log(response);
    });
}

Cependant, le problème est que lorsque je vérifie la demande dans les outils de développement chrome de l'onglet Réseau, je ne trouve aucun champ Content-Type Pour document, tandis que pour le champ fileContent-Type Est application/pdf (J'envoie un fichier pdf).

Request shown in network inspector

Sur le serveur Content-Type Pour document est text/plain;charset=us-ascii.

Mise à jour:

J'ai réussi à faire une demande correcte via Postman, en envoyant document sous forme de fichier .json. Bien que j'ai découvert que cela ne fonctionne que sur Linux/Mac.

7
pavlee

Pour définir un type de contenu, vous devez transmettre un objet de type fichier. Vous pouvez en créer un en utilisant un Blob.

const obj = {
  hello: "world"
};
const json = JSON.stringify(obj);
const blob = new Blob([json], {
  type: 'application/json'
});
const data = new FormData();
data.append("document", blob);
axios({
  method: 'post',
  url: '/sample',
  data: data,
})
25
Quentin

il vous suffit d'ajouter les bons en-têtes à votre demande

axios({
  method: 'post',
  url: 'http://192.168.1.69:8080/api/files',
  data: formData,
  header: {
            'Accept': 'application/json',
            'Content-Type': 'multipart/form-data',
          },
    })
0
David MARIE