• 图片防盗链


    using System;
    using System.Web;

    /// <summary>
    /// ImageProtect 的摘要说明
    /// </summary>
    public class ImageProtect : IHttpHandler
    {
        
    public ImageProtect()
        {
            
    //
            
    // TODO: 在此处添加构造函数逻辑
            
    //
        }
        
    public void ProcessRequest(HttpContext context)
        {
            
    //判断是否是本地引用,如果是则返回给客户端正确的图片,这里的判断就是用到了前面所述的http请求中所记路的参考页信息
            
    //此处使用了端口,仅用于       
            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;
            }
        }
    }
     

    Web.Config
    <httpHandlers>
     
    <add verb="*" path="*.jpg" type="ImageProtect"/>
    </httpHandlers>
     




    2.
    #region IHttpHandler 成员
        
    bool IHttpHandler.IsReusable
        {
            
    get { return true; }
        }
        
    void IHttpHandler.ProcessRequest(HttpContext context)
        {
            
    string FileName = context.Server.MapPath(context.Request.FilePath);
            
    if (context.Request.UrlReferrer.Host == null)
            {
                context.Response.ContentType 
    = "image/JPEG";
                context.Response.WriteFile(
    "/no.jpg");
            }
            
    else
            {
                
    if (context.Request.UrlReferrer.Host.IndexOf("mydomain.com"> 0)
                {
                    context.Response.ContentType 
    = "image/JPEG";
                    context.Response.WriteFile(FileName);
                }
                
    else
                {
                    context.Response.ContentType 
    = "image/JPEG";
                    context.Response.WriteFile(
    "no/jpg");
                }
            }
        }
        
    #endregion

    编译成dll。
    <httpHandlers>
    <add verb="*" path="*.jpg" type="JpgHandler, MyDll" />
    </httpHandlers>
    在IIS网站配置中把JPG映射到aspnet_isapi.dll



  • 相关阅读:
    Oracle的hash分区
    Oracle的list分区
    range联合分区
    Oracle分区表range单分区
    彻底解决Oracle unable to create INITIAL extent for segment in tablespace xx
    Oracle表空间管理,数据迁移,
    plsqldevelop安装教程
    count(*)与count列谁快谁慢
    阿里云服务器Centos6.9安装oracle11g单实例数据库
    字符转换二进制码
  • 原文地址:https://www.cnblogs.com/zengxiangzhan/p/1565388.html
Copyright © 2020-2023  润新知