【问题标题】:Download PDF with jquery使用 jquery 下载 PDF
【发布时间】:2013-10-09 15:46:04
【问题描述】:

类似于POST to server, receive PDF, deliver to user w/ jQuery 但这似乎在这里不起作用...

我需要向服务器发送一个请求,其中包含名称/值对的有效负载。服务器通过发送 PDF 文件进行响应

所有用户需要知道的是,在点击页面上的 pdf 按钮后,他们将获得浏览器默认行为(即保存或查看)。

所以,调用很简单(我认为)

 $.ajax({
  url:"http://blah.com/etc",
  data:{filename:'output.pdf', foo:'foo', bar:'bar', baz:'baz'},
  type:"POST"
 });

这就是服务器需要做的所有事情并返回 output.pdf

它看起来工作正常。以下是响应标头:

Connection:keep-alive
Content-Disposition:attachment; filename="output.pdf"
Content-Length:17896
Content-Type:application/pdf
Date:Thu, 03 Oct 2013 04:19:06 GMT
Server:nginx

而且,如果我查看 Chrome 开发工具中的响应,它在我看来确实像 17k pdf...

最后一个障碍是浏览器(Chrome 或 FF)什么都不做,我想我错过了“现在将此响应作为可下载文件处理”的部分

【问题讨论】:

  • 您想通过单击按钮获得 pdf 下载吗?在这里你可以用 HTML5 来做,你需要用 pdf 位置的 url 设置锚标签 a 并添加属性 download
  • 感谢 Satinder,但这并不能处理有效载荷数据,而且我还有一两个 IE8 用户

标签: javascript jquery ajax


【解决方案1】:

我第一次回答了我自己的问题,所以,这里......

这里有一个关于这个主题的 JQuery 论坛帖子http://forum.jquery.com/topic/download-file-from-jquery-post

看来这不起作用并且永远不会起作用的原因是这些标头永远不会以浏览器可以响应的方式到达浏览器 - AJAX 结果在没有浏览器干预的情况下传递给调用脚本。

真的很有道理。

如果有人有更好的解决方案,我仍然感兴趣,但到目前为止,我正在使用 JQuery 在运行时生成一个隐藏表单,然后触发一个 .submit()

这行得通。

【讨论】:

    【解决方案2】:

    如果你想保存/打开文件,你可以选择使用 php。见下文:

    首先,使文件名“download.php”包含以下代码:

    $filename = $_GET['fname']; 
    header('Pragma: public');
    header('Expires: 0');
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
    header('Cache-Control: private', false); // required for certain browsers 
    header('Content-Type: application/octet-stream');
    
    header('Content-Disposition: attachment; filename="'. basename($filename) . '";');
    header('Content-Transfer-Encoding: binary');
    header('Content-Length: ' . filesize($filename));   
    
    readfile($filename);
    
    $fp=fopen($filename,"rb");
    
    
    if(!feof($fp)){
      print(fread($fp,1024*8));
    
      flush();
      ob_flush();
      if(connection_aborted){
    
      }
    }else{
     echo 'File has been downloaded.';
    }
    exit;
    

    然后,调用你的download.php:

    <a href="download.php?fname=sample.pdf">Sample file</a>
    

    此代码可用于下载任何文件类型。

    附:始终小心路径和权限问题。

    希望有用...

    干杯,

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-01
      • 2013-09-05
      • 2016-04-07
      • 2017-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-26
      相关资源
      最近更新 更多