如何通过休息从angular2中获取光盘中的excel文件

时间:2016-08-23 08:31:57

标签: excel rest angular

我正在使用带有Java背景的角度2,并且它们之间的通信是通过REST进行的。我要做的是在按钮单击时创建一些excel文件,然后在用户API中返回该文件。

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

在angular(返回REST,调用正常): 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)。有人知道会出现什么问题吗?

1 个答案:

答案 0 :(得分: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))

}