1

我有一个 PHP 脚本,它从服务器下载 PDF 文件并提示您打开或保存它。该脚本接受一次性令牌,用于代替文件名,以隐藏文件名。

如果您转到实际的 php 页面,http ://example.com/files/download/token脚本可以正常工作并下载 PDF。

我可以使用标准链接标签将人们发送到该页面,但是一旦文件下载,我需要更新该页面上通过该下载脚本返回的内容。

有没有办法让ajax调用打开一个新窗口,文件将在其中下载,然后返回我需要更新当前页面的数据?

下载脚本还有更多内容,但主要部分是实际下载部分:

 header("Content-type: application/pdf"); 
 $this->load->helper('file');
 readfile("static/temp_statements/".$local_file_name);
 unlink("static/temp_statements/".$local_file_name);
4

1 回答 1

5

我过去使用的一个可能对您有用的技巧是

  • 在您的 ajax 调用中提供查询参数以下载 PDF。这将是一个唯一的名称。
  • 流式传输 PDF 以供下载的服务器进程会设置一个具有此唯一名称的 cookie。
  • 您在页面中轮询等待此 cookie 出现。
  • 当 cookie 出现时,您可以假设文件已下载,并且您可以执行您的或有操作。

你不需要打开一个窗口来实现这一点。您可以像这样附加一个不可见的 iframe:

$(some selector).append($("<iframe width='1' height='1' frameborder='0' src='" + url + "'></iframe>"));

为了诚实和透明,我最初从这个 SO 答案中找到了这个想法,它对我有用:检测浏览器何时接收文件下载

于 2013-02-23T20:10:58.447 回答