2016-08-23 66 views
0

我正在使用角度2與Java背景和他們之間的通信是通過REST。我必須做的是在button button上創建一些excel文件,然後在用戶API中返回該文件。如何從角度2中的光盤通過休息獲得excel文件

REST看起來是這樣的: @RequestMapping(value = "/some_path/{someId}", method = RequestMethod.GET, produces = MediaType.APPLICATION_OCTET_STREAM_VALUE) public FileSystemResource exportSomeData(@PathVariable long someId, HttpServletResponse response) { // ... create excel file data... File file = new File(fileName); response.addHeader("FILE_NAME", fileName); FileNameResource fsr = new FileNameResource(file); return fsr; }

在角(其餘的迴歸,呼喚工程確定): getFile(path:String) { this.autthHttp.get(`some_path') .map((response) => { let blob = (response)['body']; return { data: new Blob([blob], {type: 'application/octet-stream'}), filename: response.headers.get('FILE_NAME') } }) .subscribe(res => saveAs(res.data, res.filename)) }

的問題是,我得到的文件,它包含的數據,但它失去了它是元數據(在單元格中顯示一些問號字符,而不是格式良好的Excel)。有人知道可能是什麼問題嗎?

+0

在RC5我試圖改變 '讓團塊=(響應) '_體']; ' 和 '數據:新的斑點([BLOB],{類型: '應用/八位字節流'})' 與 '讓團塊= response.blob()' 和 '數據:blob' 但那麼我得到了一個異常_請求正文不是blob或數組buffer_。 – Stojan

回答

8

嘗試設置的responseType到BLOB並使用RC5的blob響應類型:

getFile(path:String) { 
this.autthHttp.get(`some_path', {responseType: ResponseContentType.Blob}) 
    .map((response) => { 
     let blob = response.blob(); 
     return { 
      data: new Blob([blob], {type: 'application/octet-stream'}), 
      filename: response.headers.get('FILE_NAME') 
     } 
    }) 
    .subscribe(res => saveAs(res.data, res.filename)) 

}

+0

謝謝。我缺少部分'{responseType:ResponseContentType.Blob}'。現在它可以工作。 – Stojan