2017-10-10 1 views
0

J'ai une simple application web dont j'ai l'intention de servir le téléchargement d'un fichier à partir d'une API REST. Le fichier est de type .xlsx.Implémenter le téléchargement du fichier à partir du service REST dans la webapp

Ma tentative naïve d'y arriver utilise un modèle de conception que j'ai copié à partir d'autres données tire du reste api par exemple:

var requestData = JSON.stringify({level: plevel, yearMonthStart: beginningYearmo, yearMonthEnd: endingYearmo}); 
    var url = 'http://localhost:8181/v2/file/download'; 
    d3.request(url) 
    .header("X-Requested-With", "XMLHttpRequest") 
    .header("Content-Type", "application/octet-stream") 
    .mimeType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet") 
    .send("POST", 
      requestData, 
      function(rawData){ 
      console.log(rawData); 
     }); 

La réponse du serveur est un 415 code d'erreur (support de charge utile non pris en charge type).

J'ai essayé de définir les en-têtes appropriés pour le flux de fichiers comme on peut le voir ci-dessus.

Mon comportement attendu est que la demande est acceptée sans erreur et que le navigateur initie un téléchargement de fichier. Toute directive ici sur la façon de mieux accomplir ceci serait appréciée.

Répondre

0

J'ai trouvé quelques exemples dans d'autres publications qui éclairent le chemin.

Vous pouvez le faire en utilisant des fichiers blob. Voici un exemple:

function downloadReport(level, beginningYearmo, endingYearmo){ 
    var requestData = JSON.stringify({plevel: level, yearMonthStart: beginningYearmo, yearMonthEnd: endingYearmo}); 
    var url = 'http://localhost:8181/file/download'; 
    d3.request(url) 
    .header("X-Requested-With", "XMLHttpRequest") 
    .header("Content-Type", "application/json") 
    .header("Accept","application/vnd.openxmlformats-officedocument.spreadsheetml.sheet") 
    .header("Cache-Control", "no-cache") 
    .header("Accept-Charset", "utf-8") 
    .on("load", function(data){ 
     var blob = new Blob([data], {type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"}); 
     var objectUrl = URL.createObjectURL(blob); 
     window.open(objectUrl); 
     console.log("Download request was successful."); 
    }) 
    .on("error", function(error){ alert("Error: ", error) }) 
    .send("POST", requestData); 
}