ASP.NET图片防盗链的方法


Posted on December 27, 2008


考试了,应该复习了,书看不进去哇~~~

空闲的时候想想自己的感兴趣的事情,想啊想就看到将要开始的一个项目,想到关于图片防盗的问题,这个东东,我觉得不是很难,大多数的网站都已经实现了,估计是在httpHandlers中实现的。

GOOGLE了一下,果然,代码很简单,原理我就不讲了,网上很多

在web.config的<system.web>配置节中加下如下代码

<httpHandlers>
      <add verb="*" path="*.jpg" type="ASPX2.jpg2, ASPX2"/>
</httpHandlers>

实现jpg2类,这个类实现了IHttpHandler接口,方法体中要实现两个方法ProcessRequestIsReusable

   public void ProcessRequest(HttpContext context)
        {
            if (context.Request.UrlReferrer.Host.ToString().IndexOf("local") != -1)
            {
                FileInfo file = new System.IO.FileInfo(context.Request.PhysicalPath);
                context.Response.Clear();
                context.Response.AddHeader("Content-Disposition", "filename=" + file.Name);
                context.Response.AddHeader("Content-Length", file.Length.ToString());
                string fileExtension = file.Extension.ToLower();
                switch (fileExtension)
                {
                    case "jpg":
                    context.Response.ContentType = "image/jpeg";
                    break;
                    //这里只列出去JPG文件,其实文件类型可以GOOGLE一下
                }
                context.Response.WriteFile(file.FullName);
                context.Response.End();
            }
            else
            {
                //这里是盗链时的处理方法,可以一张盗链提示的图
            }
        }

这样基本上就OK了,测试页使用的是http://127.0.0.1,页面打开显示盗链的信息,用http://localhost打开的时候,就正常了。


其实写到这里,问题也就结束了,但还有一个问题,这种方法处理的效率如何呢?有待进一步研究哈~~~

2009-1-22补充一下:VS自带的WEB服务器会把所有的请求映射到ASP.NET FRAMEWORK来处理。在IIS中,需要配置图片文件扩展名映射到ASP.NET FRAMEWORK上,这个问题原来没发现。。


标签:N/A

 

在线学习答案查询入口
微信扫码联系
微信扫码联系