摘要:如何透過HTTP Handler讓Web專案中的圖案(JPG)Response時加上指定的文字
我們經常可以再別的網站看到,當上傳圖片到網站後,顯示出來的圖片會加上一個該網站的名稱文字,或者是加上該網站的Logo。這個部分可以透過HTTP Handler來實踐他。
何謂HTTP Handler?
請參考這一篇【ASP.NET Request處理的過程】,了解了HTTP Handler在ASP.NET Request處理過程所扮演的角色與位置後,接著就來看看如何撰寫HTTP Handler
撰寫HTTP Handler
首先在您的專案中,增加一個新的項目,選擇【Class】,如果您的專案中沒有App_Code的目錄,他會自動的問您是否將Class存放在App_Code目錄中,請選擇是,該Class的檔案名稱為【JPGHandler.vb】
我們先將會用到的Name Space Imports進來?
Imports Microsoft.VisualBasic
Imports System.Web
Imports System.Drawing
Imports System.Drawing.Imaging
Imports System.IO
接著,要實作【IHttpHandler】介面
Public Class JPGHandler
Implements IHttpHandler
End Class
當輸入了【Implements IHttpHandler】按下Enter後,會自動把相關的語法產生如下:
Public ReadOnly Property IsReusable() As Boolean Implements System.Web.IHttpHandler.IsReusable
Get
End Get
End Property
Public Sub ProcessRequest(ByVal context As System.Web.HttpContext) Implements System.Web.IHttpHandler.ProcessRequest
End Sub
先設定讓IsReusable的屬性傳會True
Public ReadOnly Property IsReusable() As Boolean Implements System.Web.IHttpHandler.IsReusable
Get
Return True
End Get
End Property
接著撰寫處理Request的部分(ProcessRequest)
Public Sub ProcessRequest(ByVal context As System.Web.HttpContext) Implements System.Web.IHttpHandler.ProcessRequest
Dim s As String = "Topcat--姍舞之間的極度凝聚" '設計您要加上的文字
Dim JpgFile As String = context.Request.PhysicalPath '定義資料路徑
Dim Jpg As Image = Image.FromFile(JpgFile) '取得Jpg Image
Dim Gphs As Graphics = Graphics.FromImage(Jpg) '宣告Graphics讀取Jpg
Dim Fnt As New Font("標楷體", 14, FontStyle.Bold) '宣告使用的字體、大小、型態
Dim Brsh As New SolidBrush(Color.Yellow) '設定顏色
Gphs.DrawString(s, Fnt, Brsh, 0, 0) '畫上文字
'輸出處理好的圖形
Dim ms As MemoryStream = New MemoryStream
Jpg.Save(ms, ImageFormat.Jpeg)
Gphs.Dispose()
Jpg.Dispose()
context.Response.Clear()
context.Response.ContentType = "image/jpeg"
context.Response.BinaryWrite(ms.ToArray())
context.Response.End()
End Sub
接著,就要設定Web.Config指定副檔名用哪個Handler處理
<system.web>
<httpHandlers>
<add verb="*" path="*.jpg" type="JPGHandler"/>
</httpHandlers>
</system.web>
測試運作程式
以上這樣就完成的程式的撰寫的部分,但是實際上要運作時卻有需要注意的地方,首先如果您是使用檔案類型開啟專案,那麼不用作其他的設定,就能夠直接的看到效果
但是如果您是透過IIS來瀏覽,那麼還要做一個設定,就是指定副檔名jpg要使用isapi來處理,小喵測試過使用XP Pro內的IIS,要做這樣的設定卻會發生無法按【確認】按鈕,小喵猜測可能是XP Pro的IIS的Bug吧!!
如果是2000 Server或者2003 Server,設定步驟如下:
- 開啟IIS
- 找到您的Web專案
- 滑鼠右鍵→內容→【目錄】頁籤
- 確認是否有建立為應用程式
- 按下【設定】開啟【應用程式設定】視窗
- 在應用程式副檔名中,【新增】
- 執行檔後的【瀏覽】,找到【C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll】
- 副檔名輸入【jpg】
- 【確定】
經過這樣的設定後,就可以瀏覽該專案中的jpg會在左上角加上指定的文字了。
以下是簽名:
- 歡迎轉貼本站的文章,不過請在貼文主旨上加上【轉貼】,並在文章中附上本篇的超連結與站名【topcat姍舞之間的極度凝聚】,感恩大家的配合。
- 小喵大部分的文章會以小喵熟悉的語言VB.NET撰寫,如果您需要C#的Code,也許您可以試著用線上的工具進行轉換,這裡提供幾個參考
Microsoft MVP Visual Studio and Development Technologies (2005~2019/6) | topcat Blog:http://www.dotblogs.com.tw/topcat |