2012-09-19 60 views
0

我想寫一個文件下載頁面供客戶從我公司的服務器上下載文件。

而且我不希望暴露真正的文件鏈接到用戶,所以我有兩個頁面:用於提供一個鏈接,點擊和張貼的文件名作爲參數傳遞給其他頁面,命名的download.php filelist.php ,接受請求並將文件流傳輸給客戶。

的download.php的關鍵部分是這樣的:

$fp = fopen($real_file_path,'r'); 
$file_size = $temp_res['ef_file_bytes']; 
Header("Content-type: application/octet-stream"); 
Header("Accept-Ranges: bytes"); 
Header("Accept-Length: ".$file_size); 
Header("Content-Disposition: attachement;filename=".$file_name); 
echo fread($fp,$file_size); 
fclose($fp); 
exit; 

現在我在filelist.php使用一個onclick()函數,點擊文件鏈接時,該功能以下稱爲:

function downloadfile(ef_name) 
    { 
     var url_str='download.php'; 
     url_str = encodeURI(url_str); 
     $.post(
     url_str,{fnm:ef_name }, 
     function(data){ 
      window.open().document.write(data); 
      } 
     ); 
    } 

但我只能在頁面上顯示文件的內容,而不是彈出一個對話框窗口來保存它。

如果我使用測試,它運作良好。

上面JS代碼中的'data'正好是我想下載的文件的全部內容。我想這個問題是在$ .post()中使用的函數中。 javascript中有沒有函數可以用post參數打開一個新頁面?

我在windows,apache,php,mysql.Thanks!

+0

[如何用jquery.ajax下載文件](http://stackoverflow.com/questions/4545311/how-to-download-a-file-by-jquery-ajax) –

+0

[使用jquery下載Ajax文件,PHP](http://stackoverflow.com/questions/3599670/ajax-file-download-using-jquery-php) –

+0

你應該考慮尋找同一主題的現有Q/A。 – ibtarek

回答

0

您不能使用$.post,但您可以使用method="POST"創建一個隱藏的form並提交它。 可選用隱藏的iframe作爲target來接收結果。

+0

是的,謝謝,當我用'POST'方法使用表單時,它確實有效。它會容易得多。所以我沒有找到使用JS代碼發送發佈請求的方法,並彈出一個對話窗口來保存文件?我只是覺得很奇怪-_- | – ChiangRay

+0

你可以使用JS來form.submit()...不幸的是。要發送帖子並接收二進制數據,您必須打開一個'socket'並自己組裝請求,$ .ajax()方法不會對您有幫助,而且XMLHttpRequest對象也會變得更緊密...... – SparK