ASP.NET中以不顯示路徑的方式提供文件下載2010-09-10 16:45:08| 分類: asp.net | 標簽: |字號大中小 訂閱 我們一般都是通過輸入一個URL或者點擊一個指向某文件鏈接來進行下載。這種方式會顯示出文件的真實地址,容易被盜鏈且安全性不高,如果要控制文件下載權(quán)限需要另外再進行控制。 本文介紹一種以不顯示路徑的方式提供文件下載。它可用于一些安全性較高的環(huán)境,如需要為不同用戶提供不同文件的下載但又不能讓用戶下載到他不該下載的文件。也可用于精確的下載計數(shù)、下載數(shù)據(jù)分析以及防盜鏈的環(huán)境。 實現(xiàn)過程并不復(fù)雜,代碼也比較簡單。 1 string path = @"C:\Demo\test.pdf"; 2 Response.ContentType = "application/pdf"; 3 //Response.AddHeader("Content-Disposition", "attachment;filename=download.pdf"); 4 Response.TransmitFile(path); 5 Response.End(); path是下載的文件的物理路徑,可以根據(jù)不同的用戶不同的需求以不同的邏輯來生成。存放這些文件的文件夾可以是計算機上的任意文件夾,不必一定在Web服務(wù)器站點的文件夾中,也就是說這個文件夾可以是無法通過Web服務(wù)器以普通方式訪問到的位置。在生成path前可以對用戶進行驗證以確保其能訪問該文件,在生成path后也可以對當前的下載進行記錄,以便日后分析數(shù)據(jù)。 ContentType如果設(shè)置成application/octet-stream則會在客戶端彈出打開或保存文件的對話框,也可設(shè)置成文件對應(yīng)的類型,以便客戶端瀏覽器來決定進行何種操作,如pdf文件可設(shè)置成application/pdf。 在header中加入Content-Disposition信息可以為用戶下載的文件指定一個默認的文件名。也可以不設(shè)置該信息,如果不設(shè)置該信息,則會將當前網(wǎng)頁的文件名作為下載的文件的文件名。 這樣,用戶在下載文件時并不知道該文件的真實路徑,提高了安全性。但是這樣做會增加服務(wù)器的負荷,所以建議在安全性要求較高的環(huán)境下使用。 |
|