2017-10-10 113 views
0

我有一個簡單的webapp,我打算從REST api提供文件下載服務。該文件的類型爲.xlsx。從web應用中的REST服務實現文件下載

我的幼稚嘗試來完成此使用,我已經從其它數據複製從REST API拉例如一個設計圖案:

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); 
     }); 

來自服務器的響應是415的錯誤代碼(不支持的有效載荷媒體類型)。

我試圖設置文件流的適當標頭,如上所示。

我的預期行爲是接受請求沒有錯誤,瀏覽器啓動文件下載。任何指導如何更好地完成這一點將不勝感激。

回答

0

我在其他文章中發現了一些照亮路的例子。

你可以使用blob文件來做到這一點。下面是一個例子:

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); 
} 
相關問題