2012-04-03 29 views
4

我正在使用簡單的解決方案在所有瀏覽器中工作。強制保存所有瀏覽器的文件 - 無法在瀏覽器窗口中打開

對於特定的文件類型或通過類定位鏈接:我如何讓他們在所有主流瀏覽器中強制下載。

我以爲我找到了apachce服務器的完美解決方案 - 將它添加到.htaccess中。

http://css-tricks.com/snippets/htaccess/force-files-to-download-not-open-in-browser/

AddType application/octet-stream .csv 
AddType application/octet-stream .xls 
AddType application/octet-stream .doc 
AddType application/octet-stream .avi 
AddType application/octet-stream .mpg 
AddType application/octet-stream .mov 
AddType application/octet-stream .pdf 

似乎在Firefox和Safari的工作,但不是Chrome或IE瀏覽器(沒有測試任何東西)

任何一個可以請幫我如何使鏈路的解決方案強制下載文件,而不是在瀏覽器中打開所有瀏覽器。

我似乎無法找到完整的瀏覽器驗證解決方案。這不可能嗎?

指向教程或片段的任何鏈接都很棒。

我的網站,如果PHP的基礎上,所以可以使它與PHP的工作,如果posible。

感謝

回答

5

設置Content-Disposition首部以「附件」,像這樣(在PHP):

header('Content-Disposition: attachment'); 

你甚至可以提出一個文件名進行下載(如果它從一個不同在URL中給出):

header('Content-Disposition: attachment; filename=file.ext'); 

如果你想直接在Apache服務器做,試試這個:

<FilesMatch "\.(pdf|csv|xls)"> 
    Header set Content-Disposition attachment 
</FilesMatch> 

(您可能添加在FilesMatch圖案更擴展)

儘量避免使用應用程序/八位字節流標頭如果可以,即,如果內容處理工作沒有它。這是因爲一些系統實際上關注了Content-Type並將其與文件一起保存。如果用戶的系統能夠找出文件的正確MIME類型,那麼對用戶來說通常會更好。

+0

您好,感謝您的幫助。我將這添加到我的WordPress的網站。在我的單一download.php模板(這是我想要強制下載的地方),我把你的線添加到模板中,像這樣... '<?php /** * @package WordPress * @subpackage MyTheme */ get_header(); header('Content-Disposition:attachment'); ?>' 但似乎沒有效果?謝謝 – Joshc 2012-04-04 11:02:38

+0

確保在輸出任何東西到瀏覽器之前運行所有header()調用。如果get_header()函數輸出任何內容,則在此之前放置header()調用。 – 2012-04-07 14:50:12

0

假設$file持有的路徑,文件繼承人的腳本,我經常用它來做到這一點:

$file = 'file.gif'; // example 
$filesize=filesize($file); 

if ($filesize > 0) { 
header("Pragma: public"); // required 
header("Expires: 0"); 
header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); 
header("Cache-Control: private",false); // required for certain browsers 
header("Content-Type: image/gif"); 
header("Content-Length: ".filesize($file)); 
header("Content-Disposition: attachment; filename=\"".basename($file)."\";"); 

readfile($file); 
} 

你確實面臨着不帶文件結構(例如iPad/iPhone的)設備的問題,但你可以刪除Content-Disposition行來解決這個問題。

+0

謝謝,你的回答看起來很有趣。我認爲我可以在wordpress的基本循環中簡單地工作,但我的PHP知識是非常基礎的。我試圖通過廚房短代碼來實現這個功能......'do_shortcode('[gallery customgal =「true」]');'這是由這個自定義圖庫函數生成的... https://gist.github .com/2300437 - 我想強制下載的** $ fullsize_image **變量,用於**第108行**。任何指針將非常感謝謝謝。玩笑 – Joshc 2012-04-04 11:24:44

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

添加此爲.htaccess(PDF改變對無論你想) - 這是目前我已經測試了所有的瀏覽器工作(沒有測試過歌劇或Safari)

相關問題