天天看点

图片锁定,防止连接

using

 System;

 System.Web;

///

<summary>

 ImageProtect 的摘要说明

</summary>

public

class

 ImageProtect : IHttpHandler

{

 ImageProtect()

    {

//

 TODO: 在此处添加构造函数逻辑

    }

void

 ProcessRequest(HttpContext context)

判断是否是本地引用,如果是则返回给客户端正确的图片,这里的判断就是用到了前面所述的http请求中所记路的参考页信息

此处使用了端口,仅用于       

if

 (context.Request.UrlReferrer.Host 

==

"

localhost

&&

context.Request.UrlReferrer.Port

6999

)               

        {

设置客户端缓冲中文件过期时间为0,即立即过期。

            context.Response.Expires 

=

;                               

清空服务器端为此会话开辟的输出缓存

            context.Response.Clear();                                   

获得文件类型

            context.Response.ContentType 

image/jpeg

;                

将请求文件写入到服务器端为此会话开辟的输出缓存中

            context.Response.WriteFile(context.Request.PhysicalPath);   

将服务器端为此会话开辟的输出缓存中的信息传送到客户端

            context.Response.End();   

        }

else

如果不是本地引用,则属于盗链引用,返回给客户端错误的图片

将特殊的报告错误的图片文件写入到服务器端为此会话开辟的输出缓存中

            context.Response.WriteFile(

~/images/error.jpg

);                    

            context.Response.End();

bool

 IsReusable

get

return

false

;

}

Web.Config

<

httpHandlers

>

add verb

*

 path

*.jpg

 type

ImageProtect

/>

</

2

.

#region

 IHttpHandler 成员

 IHttpHandler.IsReusable

 { 

true

; }

 IHttpHandler.ProcessRequest(HttpContext context)

string

 FileName 

 context.Server.MapPath(context.Request.FilePath);

null

)

image/JPEG

/no.jpg

);

 (context.Request.UrlReferrer.Host.IndexOf(

mydomain.com

            {

                context.Response.ContentType 

                context.Response.WriteFile(FileName);

            }

                context.Response.WriteFile(

no/jpg

#endregion

编译成dll。

JpgHandler, MyDll

在IIS网站配置中把JPG映射到aspnet_isapi.dll

继续阅读