• 图片防盗链实现


    项目结构如下

    代码一:

    ImageCalss

    namespace 防盗链.Handler
    {
        public class ImageClass : IHttpHandler
        {
            public bool IsReusable
            {
                get { return false; }
            }
    
            //禁止盗链的图片
            const string errImg = "/Content/Images/daolian.jpg";
            public void ProcessRequest(HttpContext context)
            {
                //获取文件服务器物理地址
                string fileName = context.Server.MapPath(context.Request.FilePath);
    
                //如果UrlReferrer为空,则显示一张默认的禁止盗链的图片
                if (context.Request.UrlReferrer == null || context.Request.Url.Host == null)
                {
                    context.Response.ContentType = "image/JPEG";
                    context.Response.WriteFile(context.Server.MapPath(errImg));
                }
                else
                {
                    if (context.Request.UrlReferrer.Host.IndexOf("www.testdao.com") > -1)
                    {
                        context.Response.ContentType = "image/JPEG";
                        context.Response.WriteFile(fileName);
                    }
                    else
                    {
                        context.Response.ContentType = "image/JPEG";
                        context.Response.WriteFile(context.Server.MapPath(errImg));
                    }
                }
            }
        }
    }

    代码二:在Web.config中的<system.web>节点下加上这句话,用来指定当请求/Content/Images/文件夹下面的图片的时候,去动态的执行“Verb”指定的另一个执行类去处理.

     <!-- HttpHandlers对请求的扩展名进行处理 -->
        <httpHandlers>
          <add  path="/Content/Images/*.jpg,*.jpeg,*.gif,*.png,*.bmp"  verb="*" type="防盗链.Handler.ImageClass,防盗链"/>
        </httpHandlers>

    测试盗链效果如下 :

    配置IIS,模拟一个上线发布的网站:如 ”http://www.testdao.com/Content/Images/tupian.jpg“, 能正常显示图片,因为是本网站。

    如图:

    如果不配置IIS,就相当于引入了”http://www.testdao.com“ 网站的图片,就会返回一个盗链图片的图片,

    如图:

    您的支持是我最大的动力,如果你觉得还可以,请您给个”推荐“!

  • 相关阅读:
    windows下的tfjs-node安装异常总结
    微信小游戏广告位iphonex底部适配问题
    JS做深度学习3——数据结构
    JS做深度学习2——导入训练模型
    ASP.NET MVC4网站搭建与发布【最新】
    JS做深度学习1——偶然发现与入门
    聊聊H5与JS近几年的黑科技
    Mysql中让两个字段不同时相同的方法
    JUnit4在Eclipse中的使用
    编写DAO,通过JdbcTemplate操作数据库的实践
  • 原文地址:https://www.cnblogs.com/Kummy/p/2935088.html
Copyright © 2020-2023  润新知