我已經在SO中找到manyquestionshere關於這個主題,但是它們中的任何一個都可以幫助我解決特定的問題。使用JQuery AJAX和PHP下載PDF文件
我需要發送一個ajax請求到PHP,然後下載一個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 「印」 像
%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沒有任何反應。這裏是修改的標題:
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));
是否有一些很好的方法來做到這一點?
header('Content-Type:application/pdf');而不是標題('Content-Type:application/octet-stream'); – Ophitect
我已經試過了。 – James
header('Content-type:application/pdf');你有一個小字母t? – Ophitect