2011-11-30 45 views
2

我正在創建一個招聘網站,並有一個名爲/ CV /的文件夾,用於存儲會員上傳的簡歷文件。Asp.net - 防止從一個特定的文件夾下載文件(PDF,Word)

讓我們說一個用戶保存他們的簡歷和它的123.pdf並保存在cv/123.pdf中。 如何防止PDF文件在瀏覽器窗口中加載或下載到用戶機器,如果他們鍵入'http://mydomain.com/cv/123.pdf'?

我在IIS6服務器上使用窗體身份驗證,Asp.Net成員和角色提供程序,Asp.net 4。

回答

3
  1. 創建一個文件夾是由該網站所使用的主要www文件夾的層次結構之外的(所以它不能直接通過URL訪問)
  2. 使用一個ASHX處理程序提供訪問要下載的文件。 ashx文件中的邏輯可以驗證用戶是否有權下載文件。

ASHX引用:123

+0

非常感謝。我最終使用了將其存儲在App_Data文件夾中並創建一個處理程序來傳輸文件的方法。 http://www.mikesdotnetting.com/Article/122/Simple-File-Download-Protection-with-ASP.NET – TGuimond

3

最好的方法是將文件放在別的地方,然後編寫一些代碼來訪問它們 - 然後代碼可以驗證調用者是否擁有必要的權限。

例如,您可以將文件存儲在您的/uploads/xyz123/目錄中。然後,爲了下載文件,例如myresume.pdf,用戶將不得不衝浪到http://yourserver/download.aspx?file=myresume.pdf

然後該網頁進行必要的驗證,加載該文件,將其作爲一個二進制瀏覽器,像這樣:

Response.ClearContent(); 
Response.ClearHeaders(); 
Response.ContentType = "application/pdf"; 
Response.AddHeader("content-disposition", "attachment; filename=" + filename); 
Response.AddHeader("content-length", binaryStream.Length.ToString); 
Response.BinaryWrite(binaryStream.ToArray()); 
Response.Flush(); 
Response.End(); 

任何用戶都不會找出文件實際存儲。

+1

通常情況下, 「其他地方」 是不是通過Web訪問的文件夾,所以如果你是網站的根是/的Inetpub/wwwroot文件/,你可能在/ inetpub/files中有文件,然後編寫一個處理程序,在執行正確的權限檢查後提供文件。此外,您可以使用web.config來允許/拒絕對文件夾的訪問 - 但這是一個廣泛的[基於用戶的授權](http://www.asp.net/security/tutorials/user-based-authorization- CS) – Prescott

+0

@羅伊 - 是的,我曾考慮過這種方法,但想知道是否有辦法做到這一點,同時保持文件夾在應用程序文件夾結構。 – TGuimond

3

您可以簡單地將文件保存在不屬於您的Web應用程序的一個目錄中。

如果你想存儲一個不應該通過http訪問的文件,就這樣做。