HttpHandler1
(1) HttpHandler是對請求的響應,可以輸出普通的html內容,也可以輸出圖片、也可以輸出一個檔案(下載)
(2) 輸出一幅動態建立的圖片(能看懂就可以)
(3) 案例1:圖片中顯示訪問者資訊
(4) 案例2:填入朋友的姓名就能產生惡搞的圖片連結
(5) 網上看到的註冊、登入時候的驗證碼也是動態產生的圖片、55.la也是這樣實現的原理。
HttpHandler實現檔案下載
(1) 如果HttpHandler輸出的是html、txt、jpeg等類型的資訊,那麼瀏覽器會直接顯示,如果希望彈出儲存對話方塊,則需要添加Header:string encodeFileName = HttpUtility.UrlEncode("過濾詞.txt"); Response.AddHeader("Content-Disposition", string.Format("attachment;filename=\"{0}\"", encodeFileName));其中filename後為編碼後的檔案名稱。filename段為建議的儲存檔案名稱
樣本:
(1)第一步
xiazai1.aspx<form id="form1" runat="server"> <div> <a href="2013-05-07 21-05-25.png">圖片1</a> </div> </form> |
(2)第二步
xiazai1.aspx更改 <form id="form1" runat="server"> <div> <a href="2013-05-07 21-05-25.png">圖片1</a> <a href= "./xiazai2.ashx">圖片2</a> </div> </form> xiazai2.ashx public void ProcessRequest(HttpContext context) { context.Response.ContentType = "image/jpeg"; context.Response.AddHeader("Content-Disposition", "attachment;filename=image2.jpg"); context.Response.WriteFile("2013-05-07 21-05-25.png"); } |
(3)第三步
如果儲存為中文名,就會出現亂碼。 public void ProcessRequest(HttpContext context) { context.Response.ContentType = "image/jpeg"; context.Response.AddHeader("Content-Disposition", "attachment;filename=腦殘.jpg"); context.Response.WriteFile("2013-05-07 21-05-25.png"); } 需要對 腦殘.jpg 加 UrlEncode public void ProcessRequest(HttpContext context) { context.Response.ContentType = "image/jpeg"; string filename = HttpUtility.UrlEncode("腦殘.jpg"); context.Response.AddHeader("Content-Disposition", "attachment;filename=" + filename); context.Response.WriteFile("2013-05-07 21-05-25.png"); } |
(2) 動態輸出用處,不用再把資源儲存到磁碟上再輸出(不會有檔案重名的問題,檔案不產生在伺服器端)。案例:點選連結彈出圖片下載對話方塊。Web的原則:能直接將產生的內容以流的形式輸出給瀏覽器,就不要產生臨時檔案。
(3) 用NPOI動態產生一個Excel表然後彈出對話方塊讓使用者下載,檔案名稱是“使用者列表.xls”。
(4) 練習:從資料庫使用者表匯出資料到Excel檔案,讓使用者下載。mdf放到App_Data下,asp.Net不用那段設定DataDirectory的代碼,用DataReader的方式讀取資料
(5) 練習:使用者表增加一個層級欄位。只有登入使用者才能下載images下的圖片檔案(Session中標識是否登入),如果使用者沒有登入則首先重新導向到登入介面讓使用者登入,使用者登入成功則跳轉到下載列表頁面,下載連結固定寫好即可。如果登入使用者是普通使用者則在圖片左上方加上“免費使用者試用”的字樣。“安全退出”。畫頁面流程。
(6) 練習:給上面的程式加上登入驗證碼。
(沒仔細看。想看詳細的朋友自己去看看吧)
【傳智播客.Net培訓—asp.net中級】8HttpHandler練習說明.avi
~
~
~
【傳智播客.Net培訓—asp.net中級】13案例:圖庫許可權控制4.avi