2014-12-18 51 views
-1

我的問題是:重定向後的文件下載

按我的頁面上的鏈接將(通過稱爲PHP文件)調用,這將下載從我的web文件的功能。這意味着頭文件信息是在文件下載時發送的,這也意味着我無法調用php頭函數將BACK重定向到我的初始頁面,在那裏我點擊了開始處的鏈接。爲什麼我想回到那個頁面,是因爲它會更新我的最新下載文件的歷史記錄,但不會在文件下載之前更新。

克服這個障礙的最佳方法是什麼?

我的功能,啓動下載:

public function downloadAuthorityRules($api_key,$id) 
{ 

    $curl_post_data = array('id' => $id); 

    $headers = array('Content-type: application/json','Authorization: '.$api_key,); 
    $fp = fopen (dirname(__FILE__) . '/localfile.tmp', 'w+');//This is the file where we save the information 
    $curl = curl_init(DOWNLOAD_AUTHORITYRULES); 
    curl_setopt($curl, CURLOPT_HTTPHEADER, $headers); 
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($curl, CURLOPT_POST, true); 
    curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($curl_post_data)); 
    curl_setopt($curl, CURLOPT_USERPWD, $api_key); 
    $file = curl_exec($curl); 

    if ($file === false) 
    { 
     $info = curl_getinfo($curl); 
     curl_close($curl); 
     die('error occured during curl exec. Additioanl info: ' . var_export($info)); 
    } 

    curl_close($curl); 

    header('Content-type: ' . 'application/octet-stream'); 
    header('Content-Disposition: ' . 'attachment; filename=myndighedsregler.pdf'); 
    echo $file;   
} 
+0

爲什麼重定向?如果您有腳本提供下載的數據,請讓該腳本在開始吐出字節之前更新下載統計數據。 –

+0

除了Marc B所說的之外,如果您立即將您的標題設置爲下載,則網站將不會離開當前頁面 - 這意味着它們不應該離開頁面,因此不需要返回。 –

+0

在我的web服務上調用的函數將更新涉及下載的表。在下載實際執行並更新相關表之前,我無法從我的web服務請求下載文件的狀態。 – DTH

回答

1

下載完成後,將無法從下載頁面重定向。它是不可能的。

您需要在之前更新下載頁面中的數據庫表,然後才能開始爲該文件提供服務。然後,顯示下載歷史記錄的主頁將在下次刷新時自然更新(假設您正確設置了no-cache標頭)。

是的,我知道,你想強制它更新。但是你不能像你想的那樣去做。

克服這個障礙的最佳方法是什麼?

您可以從主頁進行Ajax輪詢,每隔幾秒鐘刷新某個DIV的內部。您需要確保在您的$.ajax()調用中設置cache: false(如果使用jQuery,我建議您爲Ajax做)。否則,由於瀏覽器緩存Ajax結果,主頁上的信息可能無法提取新數據。

0

找到解決我的問題重定向,這可能是使用他人的另一種方式:

我的網頁上目前使用AJAX的內容加載到我div的,因此,我已經有一個名爲loadPage JavaScript函數。

我所做的,是實現了一個名爲delayedLoadPage功能,簡單的使用的setTimeout如下

function delayedLoadPage(page) 
{ 
    setTimeout(function() { loadPage(page);},5000);  
} 

此功能只是調用loadPage後的5秒過去。

我改變了我在我的參考,其不下載位於並添加一個onclick事件

<a onclick="javascript:delayedLoadPage('authorityRules.php')" href="<? echo "downloadAuthorityRules.php?id=".$auth_current['auth_rules'][0]['id'];?>" > 

結果是,該文件將開始下載,並在5秒後我的頁面是PHP在超時發生時重新加載,並調用loadPage。