2013-02-23 143 views
1

我有一個PHP腳本,用於從服務器下載PDF文件並提示您打開它或保存它。該腳本接受一次性令牌(用於代替文件名)來隱藏文件名。如何使用ajax調用打開PDF

如果你去實際的PHP頁面,http://example.com/files/download/token該腳本工作正常,它下載PDF。

我可以用標準鏈接標記將人員發送到該頁面,但是一旦文件下載,我需要更新通過該下載腳本返回的該頁面上的內容。

有沒有辦法讓ajax調用打開一個新的窗口,在那裏文件將下載,然後返回我需要更新當前頁面的數據?

還有更多的下載腳本,但主要部分是實際下載的一部分:我在過去使用

header("Content-type: application/pdf"); 
$this->load->helper('file'); 
readfile("static/temp_statements/".$local_file_name); 
unlink("static/temp_statements/".$local_file_name); 
+0

您需要donwload文件之後,你需要更多的數據來更新頁面? – 2013-02-23 20:07:18

+0

是的,所以基本上你點擊包含一次性令牌的下載鏈接來下載文件。然後,一旦文件下載,我需要更新一個時間令牌鏈接,以便他們可以再次點擊它。 – Bill 2013-02-23 20:10:03

+0

所以我想要ajax調用返回新的令牌,所以我可以添加,並打開一個新的選項卡或窗口,其中將包含實際下載 – Bill 2013-02-23 20:10:50

回答

5

一招給你的是

    可能有用
  • 在您的ajax調用中提供查詢參數以下載PDF。這將是一個獨特的名字。
  • 流式下載PDF格式的服務器進程使用此唯一名稱設置cookie。
  • 你在你的頁面投票,等待這個cookie出現。
  • 當出現cookie時,您可以假定該文件已下載,並且您可以執行您的臨時操作。

而且您不需要打開窗口來實現此目的。你可以只添加一個不可見的iframe這樣的:

$(some selector).append($("<iframe width='1' height='1' frameborder='0' src='" + url + "'></iframe>")); 

在誠實和透明的利益,我最初發現從這個這個想法SO回答,它的工作對我來說:Detect when browser receives file download

+0

看起來應該工作 – 2013-02-23 20:14:28

+0

雅正是我想回答。 – 2013-02-23 20:25:32

+0

似乎很簡單,似乎在工作!謝謝 – Bill 2013-02-23 20:48:38