通过 XHR 请求下载 PDF 文件
Posted
技术标签:
【中文标题】通过 XHR 请求下载 PDF 文件【英文标题】:PDF file download through XHR Request 【发布时间】:2013-12-14 03:24:49 【问题描述】:通过 XHR 请求下载 pdf 文件是完全不可能的吗?
我知道已经有很多关于这个话题的其他讨论,但遗憾的是,我仍然对它们不满意。
我正在使用 AngularJs 并使用其 $Http
方法发出请求。它不返回任何文件下载弹出窗口。但是,如果我在新的浏览器窗口中使用相同的 URL,那么我会得到一个弹出窗口。
我已经尝试过一个work-arround,它的工作正常,即document.location.href = url;
,但如果我这样做,那么在下载弹出窗口准备好并出现之前,我无法显示等待图像。
所以周围的工作对我来说是不够的。我想通过对服务器的请求以一种真正的方式来做到这一点,通过它我也可以处理结果的替代流程。
【问题讨论】:
总之你想使用ajax请求下载pdf文件吗? 是的,但是以 angular.js 或 jQuery 方式...这样我就可以处理所有替代流程。喜欢加载图片... 【参考方案1】:看看这个 JQuery 插件 jquery-file-download-plugin 这是这个插件的演示页面demo .我认为它将 iframe 动态插入到 DOM 并产生类似于 AJAX 请求的外观。可能对你有帮助。
【讨论】:
它对我有用,我需要在服务器端的 http 响应中添加一个 cookie...谢谢。【参考方案2】:这当然取决于 PDF 文件的大小,但如果 PDF 不太大,这将是一种可行的方法:
显示“等待图像”并使用$http
下载PDF。
$http.get('http://my.example.com/foo.pdf').success(function(pdfData)
... do something with pdfData ...
);
将pdfData
转换为Base64编码并使用data URI scheme为下载的PDF文件创建一个URL。
【讨论】:
如何将此 pdfData 转换为 base 64... 我正在使用 btoa 函数,但它显示一些错误... 短寿命小型pdf的完美解决方案以上是关于通过 XHR 请求下载 PDF 文件的主要内容,如果未能解决你的问题,请参考以下文章
从请求响应创建 PDF 不适用于 axios,但适用于本机 xhr