通过 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。

    重定向到该 URL。

【讨论】:

如何将此 pdfData 转换为 base 64... 我正在使用 btoa 函数,但它显示一些错误... 短寿命小型pdf的完美解决方案

以上是关于通过 XHR 请求下载 PDF 文件的主要内容,如果未能解决你的问题,请参考以下文章

从请求响应创建 PDF 不适用于 axios,但适用于本机 xhr

使用 ajax 请求下载文件

java使用浏览器请求下载pdf文件

Android 操作快速查看 - 文件问题 - 尝试打开远程 pdf 文档

极客时间的下载文件在哪里

使用 Python 请求模块下载并保存 PDF 文件