標籤:code .text 發送 .net clear 執行 中文 頭部 按鈕
HttpHandler:處理請求(Request)的資訊和發送響應(Response)。
HttpModule:通過Http Module向Http請求輸出資料流中寫入文字,httpmodule先執行
它們兩個的區別:
頁面處理常式在處理過程中,要經曆HttpModule,HttpHandler的處理HttpModule用於頁面處理前和處理後的一些事件的處理,HttpHandler進行真正的頁面的處理。
HttpModule會在頁面處理前和後對頁面進行處理,所以它不會影響真正的頁面請求。通常用在給每個頁面的頭部或者尾部添加一些資訊(如版 權聲明)等。
IHttpModule:是屬於大小通吃類型,無論用戶端請求的是什麼檔案,都會調用到它;例如aspx,rar,html的請求.
IHttpHandler:則屬於挑食類型,只有ASP.net註冊過的檔案類型(例如aspx,asmx等等)才會輪到調用它.
案例:在圖片指定位置上列印指定文字 (以下是 ashx程式)
context.Response.ContentType = "image/JPEG";string name = context.Request["Name"]; //url的請求參數string fullpath = HttpContext.Current.Server.MapPath("20110410231802.jpg"); //指定圖片路徑using (System.Drawing.Bitmap bitmap = new System.Drawing.Bitmap(fullpath)) { using (System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(bitmap)) { g.DrawString(name, new System.Drawing.Font("黑體", 30), System.Drawing.Brushes.Pink, 175, 30); //設定參數 } bitmap.Save(context.Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg); }案例:HttpHander 實現檔案下載
如果HttpHander輸出的是html,txt,jpeg等類型的資訊,那麼瀏覽器會直接顯示,如果希望彈出儲存對話方塊
需要Header添加:Content-Disposition:attachment;filename=自訂.jpg
context.Response.ContentType = "image/JPEG"; string name = HttpUtility.UrlEncode("哈哈.jpg"); // URL編碼,防止亂碼 context.Response.AddHeader("Content-Disposition","attachment;filename=" + name); // 添加Hander context.Response.WriteFile("20110410231802.jpg"); // 輸出檔案
然後在HTML頁面中調用 <a href="down.asxh">圖片下載</a>
案例:點擊圖片按鈕實現下載
//檔案下載protected void imgGet_Click(object sender, ImageClickEventArgs e){ string filePath = (sender as LinkButton).CommandArgument; if (File.Exists(Server.MapPath(filePath))) { FileInfo file = new FileInfo(Server.MapPath(filePath)); Response.ContentEncoding = System.Text.Encoding.GetEncoding("UTF-8"); //解決中文亂碼 Response.AddHeader("Content-Disposition", "attachment; filename=" + Server.UrlEncode(file.Name)); //解決中文檔案名稱亂碼 Response.AddHeader("Content-length", file.Length.ToString()); Response.ContentType = "appliction/octet-stream"; Response.WriteFile(file.FullName); Response.End(); }}
另一種差不多的方法實現下載
// 實現檔案下載string filePath = Soft.Rows[0]["AppAdd"].ToString();string fileName = Soft.Rows[0]["AppName"].ToString();FileInfo info = new FileInfo(Server.MapPath(filePath));long fileSize = info.Length;Response.Clear();Response.ContentEncoding = Encoding.GetEncoding("UTF-8"); //解決中文亂碼Response.ContentType = "application/x-zip-compressed";Response.AddHeader("Content-Disposition", "attachment;filename=" + Server.UrlEncode(fileName + info.Extension)); //解決中文檔案名稱亂碼//不指明Content-Length用Flush的話不會顯示下載進度 Response.AddHeader("Content-Length", fileSize.ToString());Response.TransmitFile(filePath, 0, fileSize);Response.Flush();Response.Close();
WebClient 以流方式下載
string url = "http://192.168.8.53:808/test.mp3";WebClient web = new WebClient();byte[] arr = web.DownloadData(url);context.Response.ContentType = "application/octet-stream";context.Response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode("test.mp3", Encoding.UTF8));context.Response.AddHeader("Content-Length", arr.Length.ToString());context.Response.BinaryWrite(arr);context.Response.End();context.Response.Close();
HttpHandler與HttpModule及實現檔案下載