2015-12-16 112 views
0

我已經在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)); 

是否有一些很好的方法來做到這一點?

+1

header('Content-Type:application/pdf');而不是標題('Content-Type:application/octet-stream'); – Ophitect

+0

我已經試過了。 – James

+1

header('Content-type:application/pdf');你有一個小字母t? – Ophitect

回答

1

我不認爲這種方法來下載pdf將工作。 Javascript正在發送請求,並且php正在發送響應。您希望將響應直接發送到瀏覽器,而不是JavaScript。您應該更改下載鏈接以直接轉至下載位置。不需要ajax/javascript。像這樣:

<a href="javascript:void(0)" onclick = "window.href='app/myPage/download?'+id">download</a>