2016-08-23 45 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