通过XHR请求下载PDF文件

8
完全通过XHR请求下载PDF文件是不可能的吗? 我知道已经有很多关于这个话题的讨论了,但遗憾的是,我仍然不满意。 我正在使用AngularJs,并使用它的$Http方法进行请求。它没有返回任何文件下载弹出窗口。但是,如果我在新的浏览器窗口中使用相同的URL进行请求,那么我就会得到一个弹出窗口。 我已经尝试过一种解决方法,它可以正常工作,即document.location.href = url;但是如果我这样做,我就无法显示等待图像,直到下载弹出窗口准备好并出现。 因此,这种解决方法对我来说还不够。我希望通过向服务器发送请求的真正方式来处理结果的替代流程。

简而言之,您想使用Ajax请求下载PDF文件? - muneebShabbir
是的,但要用Angular.js或jQuery的方式... 这样我就可以处理所有备选流程,比如加载图片... - Ch Faizan Mustansar
2个回答

11
请查看这个 JQuery 插件 jquery-file-download-plugin,这是该插件的演示页面 demo。 我认为它会动态地将 iframe 插入到 DOM 中,并产生类似 AJAX 请求的外观和感觉。这可能对你有所帮助。

它对我有用,我需要在服务器端的HTTP响应中添加一个cookie...谢谢。 - Ch Faizan Mustansar

4

这当然取决于PDF文件的大小,但如果PDF文件不太大,这将是可行的方法:

  1. Show the "waiting image" and download the PDF using $http.

    $http.get('http://my.example.com/foo.pdf').success(function(pdfData) {
      ... do something with pdfData ...
    });
    
  2. Convert pdfData to Base64 encoding and use a data URI scheme to create a URL for the downloaded PDF file.

  3. Redirect to that URL.

我该如何将这个pdfData转换为base 64?我正在使用btoa函数,但它显示一些错误。 - Ch Faizan Mustansar
适用于短期使用的小型PDF的完美解决方案。 - miron

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接