2017-03-31 5 views
1

백엔드가 이미 응답에서 다운로드를 제공하고있을 때 어떻게 각도 2에서 다운로드를 트리거합니까?각도 2 트리거 엑셀 다운로드

내 백엔드는이 같은 API 엔드 포인트 제공 :

Workbook userExcelReport = excelReportGenerator.createUserExcelReport(userSurveys); 

    response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); 
    response.setHeader("Content-Disposition", "attachment; filename=\"" + userFileName + ".xlsx\""); 

    try { 
     userExcelReport.write(response.getOutputStream()); 
     userExcelReport.close(); 
     response.flushBuffer(); 
     return new ResponseEntity(HttpStatus.OK); 
    } catch (IOException e) { 
     logger.error("The excel workbook could not write to the outputStream ", e); 
     return new ResponseEntity(HttpStatus.INTERNAL_SERVER_ERROR); 
    } 
} 
방법은 입증

가 작동하는 (아무 프론트 엔드와 백엔드 (입력으로) 다운로드가 제대로 트리거를)하지만 지금은 각도를 만들고 싶어

return this._http.get(this.url, { 
     search: params 
    }); 

을하지만 지금은 아래를 실행하는 방법을 잘 모릅니다 : 다운로드

에게 트리거 2 페이지 전 페이지가 다소 준비, 내가 서비스이 있습니다 응답과 부하 (내가 그것을지도하는 방법을 모르거나 무엇을 해달라고)

+0

엑셀 리소스 URL에 직접 연결할 수 있습니다. 또는 window.location을 사용하여 브라우저에서 해당 URL로 이동하여 파일을 다운로드하십시오. AJAX 요청을 사용할 필요가 없습니다. –

+0

가능한 [Javascript : 파일 만들기 및 저장] (http://stackoverflow.com/questions/13405129/javascript-create-and-save-file) – toskv

+0

@toskv 가능한 중복 파일에 대한 것이므로이 질문에 대한 것입니다. 백엔드의 응답 엔티티에 대한 다운로드를 트리거링한다. –

답변

0

정말 간단한 해결책 : 엔드 포인트가 이미 다운로드 단지 (의 검색어 매개 변수와 함께) 엔드 포인트 URL을 구축 트리거 경우

this.url += '/api/survey/report/'; 
this.url += this.adminForm.get('fileType').value; 

if (this.adminForm.get('evaluated').value !== null || this.adminForm.get('startDate').value !== null 
    || this.adminForm.get('endDate').value !== null) { 
    this.url += '?'; 


    if (this.adminForm.get('evaluated').value !== null) { 
    this.url += '&name='; 
    this.url += this.adminForm.get('evaluated').value; 
    } 

    if (this.adminForm.get('startDate').value !== null && this.adminForm.get('startDate').value !== '') { 
    this.url += '&startdate='; 
    this.url += this.adminForm.get('startDate').value; 
    } 

    if (this.adminForm.get('endDate').value !== null && this.adminForm.get('endDate').value !== '') { 
    this.url += '&enddate='; 
    this.url += this.adminForm.get('endDate').value; 
    } 
} 

및 그냥 리다이렉트하면됩니다.

window.location.href = this.url; 

this.url = environment.apiURL;