【发布时间】:2021-01-27 14:21:15
【问题描述】:
(Jhipster,前端 Angular 9 和后端 spring-boot)
我的应用会生成 xls 报告。 该报告是用 Apache Poi 完成的,并在本地复制。
现在我正在尝试将文件下载到客户端,但我不知道如何。
我想在下载完成后删除文件。 这是一个 post 方法,因为我发送报告的数据。
你有什么想法吗?
这是我的控制器:
public void createFullReport(@Valid @RequestBody ReportDTO report, HttpServletResponse response) throws IOException {
log.debug("REPORTDTO : {}", report);
File outputFile = this.reportService.makeFullReport(report);
log.debug("FILE EXIST:{}", outputFile.exists());
log.debug("IS FILE:{}", outputFile.isFile());
log.debug("FILE NAME:{}", outputFile.getName());
FileInputStream stream = new FileInputStream(outputFile);
response.setContentType("application/vnd.ms-excel");
response.setHeader("Content-disposition", "attachment; filename=" + outputFile.getName());
}
我的服务:
create(report: IReport): any {
console.log(report);
return this.http.post<any>(this.resourceUrl, report, { observe: 'response' });
}
我的组件:
this.reportService.create(this.report).subscribe((response: any) => {
console.log(response);
var blob = new Blob([response._body], { type: 'application/vnd.ms-excel' });
});
编辑
控制器:
@PostMapping("/report")
@PreAuthorize(
"hasAnyAuthority(\"" +
AuthoritiesConstants.ADMIN +
"\"+\"," +
AuthoritiesConstants.CUSTOMER_ADMIN +
"\"+\"," +
AuthoritiesConstants.INSPECTOR +
"\")"
)
public ResponseEntity createFullReport(@Valid @RequestBody ReportDTO report, HttpServletResponse response) throws IOException {
log.debug("REPORTDTO : {}", report);
XSSFWorkbook wb = (XSSFWorkbook) this.reportService.makeFullReport(report);
response.setHeader("Content-Disposition","attachment; filename=\"timesheet.xlsx\"");
writeToOutputStream(response,wb);
return ResponseEntity.ok().build();
}
private void writeToOutputStream(HttpServletResponse response,XSSFWorkbook wb){
ServletOutputStream out ;
try {
out = response.getOutputStream();
wb.write(out);
wb.close();
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
角度服务:
create(report: IReport): any {
console.log(report);
let HTTPOptions:Object = {
headers: new HttpHeaders({
'Content-Type': 'application/json'
}),
responseType: 'blob'
}
return this.http.post<any>(this.resourceUrl, report,HTTPOptions);
}
【问题讨论】:
标签: java angular spring-boot jhipster