我已在SO中找到关于主题的many questions here,但其中任何一个都可以帮助我解决具体问题。
我需要向PHP发送ajax请求,然后下载PDF文件。
这是我的Javascript
$('body').on("click",'.download-file', function(e) {
e.stopPropagation();
var id = $(this).attr('data-id');
$.ajax({
url: 'app/myPage/download',// The framework will redirect it to index.php and then to myPage.class and method dowload
data: id,
type: 'POST',
success: function (return) {
console.log(return);
},
error: function(jqXHR, textStatus, errorThrown) {
console.log("Error... " + textStatus + " " + errorThrown);
}
});
});
这是我的PHP文件:
class myPage{
public function download()
{
$id = $_POST['id'];
$filePath = $this->methodToGetFile($id);
$name = end(explode('/',$filePath));
$fp = fopen($filePath, 'rb');
header("Cache-Control: ");
header("Pragma: ");
header("Content-Type: application/octet-stream");
header("Content-Length: " . filesize($filePath));
header("Content-Disposition: attachment; filename='".$name."';");
header("Content-Transfer-Encoding: binary\n");
fpassthru($fp);
exit;
}
}
通过这种方法,我得到了PDF" print"在控制台中
%PDF-1.5%����1 0 obj<</Type/Catalog/Pages 2 0 R/Lang(pt-BR) /StructTreeRoot 8 0 R/MarkInfo<</Marked true>>>> ...
。
所以,我想知道如何打开此文件并下载它。
在关联的问题中,我看到了window.location
的一些问题,但我不知道如何使用它。
我已经尝试更改PHP标头以尝试强制下载,但没有成功。在这些情况下,我只是在javascript中收到null没有任何反应。以下是修改后的标题:
header('Content-Type: application/pdf');//tried with this option
//header('Content-Type: application/octet-stream');// also tried with this other option
header('Content-Disposition: attachment; filename=' . $name);
header('Content-Transfer-Encoding: binary');
header('Connection: Keep-Alive');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Content-Length: ' . filesize($filePath));
有没有一些好方法可以做到这一点?
答案 0 :(得分:1)
我认为这种下载pdf的方法无效。 Javascript正在发送请求,而php正在发送响应。您希望响应直接转到浏览器,而不是javascript。您应该更改下载链接以直接转到下载位置。不需要ajax / javascript。像这样:
<a href="javascript:void(0)" onclick = "window.href='app/myPage/download?'+id">download</a>