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