如何透過HTTP Handler讓Web專案中的圖案(JPG)Response時加上指定的文字

摘要:如何透過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會在左上角加上指定的文字了。


以下是簽名:


Microsoft MVP
Visual Studio and Development Technologies
(2005~2019/6) 
topcat
Blog:http://www.dotblogs.com.tw/topcat