请删除异常抛出前的注释以查看问题。路径是:http://localhost:8080/api/download
原始问题: 我允许用户在 Angular7 应用程序中使用 JasperReports 下载报告,但问题仅与 Spring Boot 有关。报告生成有效,但我无法让文件下载按我的预期运行。
目前:下载链接与 一起使用href
,链接与 一起使用target="_blank"
。用户单击它,浏览器会打开一个新选项卡(在后台)并弹出窗口File Save As
。如果一切正常,则文件保存没有问题。但是如果在PDF生成过程中某处出现异常,浏览器仍然会弹出窗口File Save As
并允许用户保存文件,它会完成,但文件将是0 bytes
.
应该是:当出现异常时,浏览器应该打开一个新选项卡,其中包含某种错误消息,但如果没有错误,则应该显示“文件另存为”窗口。
代码:
@GetMapping("/salary-report/{id}")
public void generateSalaryReport(@PathVariable("id") long salaryReportId, HttpServletResponse response) throws IOException, JRException, SQLException {
JasperPrint jasperPrint;
var salaryReport = salaryReportRepositoryEx.findById(salaryReportId).orElseThrow(ResourceNotFoundException::new);
try (OutputStream out = response.getOutputStream()) {
HashMap<String, Object> parameters = new HashMap<>();
parameters.put("ReportId", salaryReport.getId());
// Set meta data
response.setContentType("application/x-download");
response.setHeader(
"Content-Disposition",
String.format("attachment; filename=\"%s%s-report%s-%s-%s.pdf\"",
.... parameters
)
);
// Set report
jasperPrint = salaryReportJasperReport.render(parameters); // exception usually here
JasperExportManager.exportReportToPdfStream(jasperPrint, out);
} catch (Exception e) {
// I tried changing the content type on Exception, but the same
response.setContentType("text/plain");
response.setHeader("Content-Disposition", null);
throw e;
}
}
带有链接的 HTML 代码 (Angular7):
<td>
<a [href]="serverApiUrl+'/jasper/salary-report/'+salaryReport.id"
target="_blank"
>
PDF Download
</a>
</td>
饮歌长啸
杨魅力
慕神8447489
相关分类