我知道的幾種方法(我知道有可能更多),打開一個鏈接,用戶點擊後,瀏覽器中的文件,什麼是在瀏覽器中打開一個文件的最好方法
- 使用PHP頭,模擬文件下載
- 使用<一個>標籤將用戶重定向到文件的
- 使用JavaScript的window.location的指向文件位置
- Iframe標記
- 路徑對象標籤
什麼是在瀏覽器中打開文件的最高效,跨瀏覽器或最好的方式?或者,大多數公司使用什麼?
我知道的幾種方法(我知道有可能更多),打開一個鏈接,用戶點擊後,瀏覽器中的文件,什麼是在瀏覽器中打開一個文件的最好方法
什麼是在瀏覽器中打開文件的最高效,跨瀏覽器或最好的方式?或者,大多數公司使用什麼?
那麼個人最好的方法是創建一個名爲download.php
腳本,然後發送文件哈希到,試想一下,你有一個目錄佈局,像這樣:
/downloads/
/2010/
/abc8755ghc7659c75678bf78968.file
/abc8755ghc7659c73278ef78998.file
/abc8755ghc7659c75678bf78968.file
/2009/
/abc8755ghc7659c75678bf78968.file
/abc8755ghc7659c75678bf78968.file
然後你有一個名爲下載腳本。 PHP,然後您可以驗證用戶信息以保護您的刮板等實際文件。
存儲沒有擴展名的文件是可以的,只要上傳文件時,您可以將所有信息存儲在您的數據庫中,這樣當我們發送文件時,我們有Content-Type,Extension,原始文件名等,所以我們可以正確發送
哈希的原因是,解析器和刮板可以很容易地找到服務器上的實際文件,所以如果一個刮板看看你的網站,然後看到一個標題叫我的電子書2010.pdf,他將無法從你的服務器下載它,如http://mydomain.com/downloads/My ebook 2010.pdf
,因爲該文件不存在,它存在於http://mydomain.com/downloads/abc8755ghc7659c75678bf78968.file
中
安全永遠是最好的措施,而且使用PHP將能夠你之前,你的應用程序決定天氣的文件應該被髮送或應b edenied
PHP示例腳本會像這樣驗證實際的用戶:
include 'all.the/files/needed.phhp';
if(!logged_in())
{
header('Location: /');
exit;
}
$FileRequest = FileRequest::getInstance();
$User = User::getInstance();
if($FileRequest->isValid)
{
if($user->canDownload($FileRequest->GetDatabaseID()))
{
$FileRequest->SendFile();
exit;
}
}
通過這種方式,您可以控制正在發送的下載文件,永遠不會泄露您的文件位置,而且惡意文件會以難以找到的散列存儲。
所有這三個將工作。但是,如果你想防止外界域(搜索引擎等)訪問你的文件,你應該使用PHP:
getfile.php?id=1
OR getfile.php?name=file.txt
,並檢查HTTP_REFERER以確保請求來自您的域。
他們是否都打開相同的文件?我以前從未注意過這一點。 – Metropolis 2010-11-09 16:10:57
如果你使用這種方法,一定要檢查並確保人們沒有使用/ | \ |。| ..字符,否則你冒着人們獲取他們不應該訪問的文件的風險。 – superfro 2010-11-09 16:12:34
@Metropolis:PHP不依賴於客戶端的瀏覽器 - 它嚴格地說是服務器端。如果您正確設置標題,則會下載該文件。 – 2010-11-09 16:12:45
使用<a href="file.pdf">download file</a>
是最有效的,跨瀏覽器的方式!
您所描述的PHP方法只是模擬一個重定向這將實現同樣的事情!
JavaScript是javascript關閉的人最不容易接觸的!
但是機器人和蜘蛛以及小腳本小子可以通過這種方式獲取文件。 – RobertPitt 2010-11-09 16:16:32
我看了一下那條評論,忘了我寫了,重新閱讀你的問題後,我去了 - 投票我自己的評論:) – RobertPitt 2010-11-09 16:25:37
因爲不同的計算機具有不同的插件,和不同的瀏覽器和操作系統。如果您想保持一致,我的建議是您的第一選擇,使用標題指定強制文件下載的內容處置。這可以防止在瀏覽器內打開一些文件時出現不一致,有些文件在第三方外部程序中打開。
這也指的是無圖像,如PDF格式的文件。您應該在瀏覽器中打開圖像。非Flash影片也值得懷疑。
使用的標籤將用戶重定向到文件
這一個路徑。給我一個鏈接,我可以點擊打開使用瀏覽器中的處理程序。或者,所以我可以右鍵單擊它並將其保存到我的硬盤驅動器。
我想說最好的方法是鏈接到文件使用<a>
標籤設置屬性target="_blank"
這樣的方式,如果用戶機器支持在瀏覽器中打開文檔,它會這樣做。如果沒有,則會提示您下載該文件。
或者,您可以在iframe或object標籤中打開該文件。這是一個主觀的問題... – zzzzBov 2010-11-09 16:07:15
我可以問在其他論壇之一....網站管理員也許? – Metropolis 2010-11-09 16:08:13