2010-11-09 78 views
0

我知道的幾種方法(我知道有可能更多),打開一個鏈接,用戶點擊後,瀏覽器中的文件,什麼是在瀏覽器中打開一個文件的最好方法

  • 使用PHP頭,模擬文件下載
  • 使用<一個>標籤將用戶重定向到文件的
  • 使用JavaScript的window.location的指向文件位置
  • Iframe標記
  • 路徑對象標籤

什麼是在瀏覽器中打開文件的最高效,跨瀏覽器或最好的方式?或者,大多數公司使用什麼?

+2

或者,您可以在iframe或object標籤中打開該文件。這是一個主觀的問題... – zzzzBov 2010-11-09 16:07:15

+0

我可以問在其他論壇之一....網站管理員也許? – Metropolis 2010-11-09 16:08:13

回答

1

那麼個人最好的方法是創建一個名爲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; 
    } 
} 

通過這種方式,您可以控制正在發送的下載文件,永遠不會泄露您的文件位置,而且惡意文件會以難以找到的散列存儲。

1

所有這三個將工作。但是,如果你想防止外界域(搜索引擎等)訪問你的文件,你應該使用PHP:

getfile.php?id=1 OR getfile.php?name=file.txt

,並檢查HTTP_REFERER以確保請求來自您的域。

+0

他們是否都打開相同的文件?我以前從未注意過這一點。 – Metropolis 2010-11-09 16:10:57

+0

如果你使用這種方法,一定要檢查並確保人們沒有使用/ | \ |。| ..字符,否則你冒着人們獲取他們不應該訪問的文件的風險。 – superfro 2010-11-09 16:12:34

+0

@Metropolis:PHP不依賴於客戶端的瀏覽器 - 它嚴格地說是服務器端。如果您正確設置標題,則會下載該文件。 – 2010-11-09 16:12:45

0

使用<a href="file.pdf">download file</a>是最有效的,跨瀏覽器的方式!

您所描述的PHP方法只是模擬一個重定向這將實現同樣的事情!

JavaScript是javascript關閉的人最不容易接觸的!

+0

但是機器人和蜘蛛以及小腳本小子可以通過這種方式獲取文件。 – RobertPitt 2010-11-09 16:16:32

+0

我看了一下那條評論,忘了我寫了,重新閱讀你的問題後,我去了 - 投票我自己的評論:) – RobertPitt 2010-11-09 16:25:37

1

因爲不同的計算機具有不同的插件,和不同的瀏覽器和操作系統。如果您想保持一致,我的建議是您的第一選擇,使用標題指定強制文件下載的內容處置。這可以防止在瀏覽器內打開一些文件時出現不一致,有些文件在第三方外部程序中打開。

這也指的是無圖像,如PDF格式的文件。您應該在瀏覽器中打開圖像。非Flash影片也值得懷疑。

0

使用的標籤將用戶重定向到文件

這一個路徑。給我一個鏈接,我可以點擊打開使用瀏覽器中的處理程序。或者,所以我可以右鍵單擊它並將其保存到我的硬盤驅動器。

0

我想說最好的方法是鏈接到文件使用<a>標籤設置屬性target="_blank"這樣的方式,如果用戶機器支持在瀏覽器中打開文檔,它會這樣做。如果沒有,則會提示您下載該文件。

相關問題