reactjs - 从 redux 商店加载 pdf
问题描述
我正在尝试在客户端下载服务器端生成的pdf文件,我使用axios获取并将其保存在redux中并使用FileSaver下载它。
const getTicketPdf = ({ userID, ticketID }) =>
requestApi(`/users/${userID}/tickets/${ticketID}/pdf`, {
method: 'get',
});
requestApi 为我获取所有必要的标头,以便我可以下载文件。
然后将数据存储在 redux 中,如下所示:
data: "%PDF-1.4\n3 0 obj\n<</Type /Page\n/Parent 1 0 R\n/MediaBox [0 0 595.00 842.00]\n/Resources 2 0 R\n/Contents 4 0 R>>\nendobj\n4 0 obj\n<</Filter /FlateDecode /Length 64>>\nstream\nx�3R��2�35W(�*T0P�R0T(\u0007�Y@�\u000e��@Q…"
我在渲染中调用它:
<div>
<button onClick={ () => this.getPdf(ticket) }>PDF</button>
</div>
getPdf = ticket => {
const blob = new Blob([ticket]);
FileSaver.saveAs(blob, 'Ticket.pdf');
}
我总是收到以下错误:
TypeError:无法读取未定义的属性“saveAs”
我也尝试设置
响应类型:'blob'
但这也无济于事。
接下来我测试的是 react-pdf 库,我设法在 Component 中显示 pdf,但我无法打印它。用户应该只保存它然后在本地打印它(或者至少在单独的选项卡中显示为 PDF,我尝试使用 window.open() 作为 base64 编码字符串)。
否则如何下载服务器端生成的 PDF?有没有更好的方法?
不幸的是,我必须设置 HTTP 标头才能获取该文件。
提前致谢。
解决方案
该错误源于没有FileSaver
对象(或者更确切地说,它是非标准的)这一事实。
它似乎被这个第三方库填充:https ://github.com/eligrey/FileSaver.js
推荐阅读
- orm - 循环结构和重用EntityNew
- karate - 如何在运行时忽略空手道功能文件中的特定场景?
- angular - 找不到模块:错误:无法解析组件。尝试从使用 ng-packagr 制作的包中导入组件时遇到问题
- algorithm - 中位数算法中位数的时间复杂度
- javascript - Onclicking单选按钮显示日历以及jquery中的一个输入框
- azure - 在 Azure 云中创建多个子帐户
- jquery - 使用 jQuery 根据 JoinOn 日期禁用/限制 LeaveOn 日期
- mysql - 如何汇总所有聚合值 SQL-Laravel?
- android - 错误:
- 内部元素必须是资源引用还是为空?
- spring - SQL 到 JPQL,如何查询嵌套的 JPQL