using System;
using System.Web;
/// <summary>
/// ImageProtect 的摘要說明
/// </summary>
public class ImageProtect : IHttpHandler
{
public ImageProtect()
{
//
// TODO: 在此處添加構造函數邏輯
//
}
public void ProcessRequest(HttpContext context)
{
//判斷是否是本地引用,如果是則返回給客戶端正確的圖片,
//假設我們的網站的地址為http://localhost:6999,演示時可根據需要修改
if (context.Request.UrlReferrer.Host == "localhost"&&context.Request.UrlReferrer.Port==6999)
{
//設置客戶端緩沖中文件過期時間為0,即立即過期。
context.Response.Expires = 0;
//清空服務器端為此會話開辟的輸出緩存
context.Response.Clear();
//獲得文件類型
context.Response.ContentType = "image/jpeg";
//將請求文件寫入到服務器端為此會話開辟的輸出緩存中
context.Response.WriteFile(context.Request.PhysicalPath);
//將服務器端為此會話開辟的輸出緩存中的信息傳送到客戶端
context.Response.End();
}
else //如果不是本地引用,則屬於盜鏈引用,返回給客戶端錯誤的圖片
{
//設置客戶端緩沖中文件過期時間為0,即立即過期。
context.Response.Expires = 0;
//清空服務器端為此會話開辟的輸出緩存
context.Response.Clear();
//獲得文件類型
context.Response.ContentType = "image/jpeg";
//將特殊的報告錯誤的圖片文件寫入到服務器端為此會話開辟的輸出緩存中
context.Response.WriteFile("~/images/error.jpg");
//將服務器端為此會話開辟的輸出緩存中的信息傳送到客戶端
context.Response.End();
}
}
public bool IsReusable
{
get
{
return false;
}
}
}
/*
* 在配置文件中
*<httpHandlers>
*<add verb="*" path="*.jpg" type="ImageProtect"/>
</httpHandlers>
*/
摘自 幸福的豬的專欄