javascript - PDF Blob - Window.open 不显示内容
问题描述
我正在尝试在前端显示来自后端的 pdf 文件,但新窗口仅显示 PDF 控件。有人可以评估我的代码并指出我做错了什么吗?
后端代码:
@RequestMapping(value = "/capaRdv/{idRdv}", method = RequestMethod.POST)
public void relatorioCapaRdv(@PathVariable Integer idRdv, HttpServletResponse response) throws JRException, SQLException, IOException {
Map<String, Object> parameters = new HashMap<String, Object>();
parameters.put("idRdv", idRdv);
InputStream jasperStream = this.getClass().getResourceAsStream("/reports/capaRdv.jasper");
JasperReport jasperReport = (JasperReport) JRLoader.loadObject(jasperStream);
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, dataSource.getConnection());
response.setContentType("application/pdf");
response.setHeader("Content-Disposition", "inline; filename=capaRdv" + idRdv + ".pdf");
final OutputStream outStream = response.getOutputStream();
JasperExportManager.exportReportToPdfStream(jasperPrint, outStream);
}
前端代码:
emiteRelatorio(idRdv) {
const url = `${baseApiUrl}/relatorios/capaRdv/${idRdv}`;
axios
.post(url, { responseType: "blob" })
.then(res => {
const file = new Blob([res.data], { type: "application/pdf" });
const fileURL = URL.createObjectURL(file);
window.open(fileURL);
})
.catch(error => {
Swal.fire({
text: error.response.data.error,
type: "error",
confirmButtonClass: "md-button md-danger btn-fill",
buttonsStyling: false
});
});
}
解决方案
通过将 POST 方法更改为 GET 解决:
method = RequestMethod.GET
axios.get
推荐阅读
- algorithm - 高效的分治算法
- html - 如何将导航与最多 3 个元素(列表)连续居中 [响应式]
- postgresql - 为什么在安装过程中加密密钥在 Postgresql TDE 中不起作用?“从 encryption_key_command 收到的未知数据”
- firebase-authentication - 如何在 Okta 中使用 Firebase 身份验证?
- google-analytics - 针对本地 Web 应用程序的分析工具推荐
- android-studio - 如何在 Android Studio 中获取远程 GitHub URL?
- python - 根据频率更改十六进制大小
- django - Celery Worker 命令 'method-wrapper' 对象没有属性 '__module__'
- php - facebook graph api我们如何获得消息的应答状态
- google-chrome-extension - Google chrome API 获取链接到我当前选项卡上的页面的页面