2013-10-03 55 views
0

类似POST to server, receive PDF, deliver to user w/ jQuery但是,这似乎并没有在这里工作......下载PDF使用jQuery

我需要发布到服务器的请求,以名称/值对的有效载荷。服务器通过发送PDF文件来响应

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

因此,呼叫这是所有的服务器需要做的东西,并返回输出.pdf

它看起来像它的正常工作一个简单的(我认为)

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

。下面是响应头:

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给我...

最后一关是,虽然浏览器(铬或FF)没有做什么,我想我错过了'现在处理这个响应作为一个可下载的文件'

+0

点击?在这里你可以使用HTML5,所有你需要设置定位标记'a'与pdf位置的URL和添加属性'下载' –

+0

谢谢Satinder,但是这不处理有效载荷数据,我仍然有一个或两个IE8用户在那里 – PerryW

回答

0

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

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

看来,这不起作用,永远不会的原因是,这些标题永远不会以浏览器可以响应的方式到达浏览器 - AJAX结果被传递到调用脚本,无需浏览器干预。

确实很完美。

的情况下,仍然有人感兴趣的人都有一个更好的解决方案,但是,截至目前,我使用jQuery生成在运行时隐藏的表单,然后发射了一个.submit()

这是工作。

1

如果你想保存/打开文件,你可以选择使用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> 

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

P.S.请务必小心路径和权限问题。

希望这是有用的......

干杯,你想上的按钮PDF下载