2010-07-09 75 views
0

我有一個錨標記:如何在不離開頁面的情況下強制另存爲對話框?

<a href="file.pdf">Download Me</a> 

我想爲用戶點擊它,然後有一個另存爲對話框中出現一個新的文件名我確定。

我發現這個(http://www.w3schools.com/php/func_http_header.asp):

header("Content-type:application/pdf"); 

// It will be called downloaded.pdf 
header("Content-Disposition:attachment;filename='downloaded.pdf'"); 

// The PDF source is in file.pdf 
readfile("file.pdf"); 

我不明白的地方把那些頭。在頁面的頂部?當我嘗試那些3線直接將我上面的鏈接我收到以下錯誤:

警告:不能更改頭 信息 - 頭已經 發送(輸出開始 /分享幫助/ ideapale /的public_html/amatorders_basic /admin/download.php:38)上線118

在 /home5/ideapale/public_html/amatorders_basic/admin/download.php 我得到了同樣的錯誤兩個我剛添加的標題行。在那之後,有幾千行ASCII字母。我怎樣才能讓Save-As對話框出現使用jQuery或PHP(無論哪個更容易)?

回答

4

使用斯泰恩凡巴爾的代碼時,請小心,它可能讓你到一些嚴重的安全漏洞。

嘗試類似:

--- download.php --- 
$allowed_files = array('file.pdf', 'otherfile.pdf'); 

if (isset($_REQUEST['file']) && in_array($_REQUEST['file'], $allowed_files)) 
{ 
    $filename = $_REQUEST['file']; 

    header("Content-type:application/pdf"); 
    header("Content-Disposition:attachment;filename='$filename'"); 

    // The PDF source is in file.pdf 
    readfile($filename); 

    exit(); 
} 
else 
{ 
    // error 
} 


--- linkpage.php --- 
<a href="download.php?file=file.pdf">Download PDF</a> 
<a href="download.php?file=otherfile.pdf">Download PDF</a> 

Probabaly一個更好的方式來做到這一點是在Web服務器級別(這可以在.htaccess中去),這將迫使所有的PDF文件作爲二進制文件進行治療(強制在以下目錄中下載照片),你的瀏覽器把這個。

<FilesMatch "\.(?i:pdf)$"> 
Header set Content-Disposition attachment 
ForceType application/octet-stream 
</FilesMatch> 
0

用頭文件和讀文件創建一個新頁面,然後使下載鏈接指向頁面,該頁面將返回PDF文件。

例如:

<a href="download.php?file=file.pdf">Download Me</a> 

來源爲的download.php:

$filename = $_REQUEST['file']; 
header("Content-type:application/pdf"); 
// It will be called downloaded.pdf 
header("Content-Disposition:attachment;filename='$filename'"); 

// The PDF source is in file.pdf 
readfile($filename); 
0

或者您也可以使用新的HTML5特性download在HTML的錨標記。

的代碼看起來像

<a download href="path/to/the/download/file"> Clicking on this link will force download the file</a> 
相關問題