HttpHandler與HttpModule及實現檔案下載

來源:互聯網
上載者:User

標籤: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及實現檔案下載

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.