我正在使用带有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)。有人知道会出现什么问题吗?
答案 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))
}