2017-10-10 2 views
0

REST API에서 파일 다운로드를 제공하는 간단한 webapp가 있습니다. 파일 형식은 .xlsx입니다.webapp의 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); 
} 
관련 문제