1.创建两个ASP.NET项目
2.一个为主,一个为辅
3.命名随便
4.在主里边添加新建项!Handler1.ashx
5.在主里边添加一个文件夹,文件夹里放图片,以image命名
6.在Handler1.ashx里边写入代码:
public class Handler1 : IHttpHandler
{
public bool IsReusable
{
get
{
return true;
}
}
}
7.获取上次请求的URL,代码如下:
Uri lastUrl = context.Request.UrlReferrer;
8.获取本次请求的URL
Uri currentUrl = context.Request.Url;
9.获取“请勿盗链”警告提示图片路径
string errorImagePath = context.Request.PhysicalApplicationPath + "image/1.jpg";
10.发送至客户端代码如下:
context.Response.WriteFile(errorImagePath);
11.判断是否为盗链
if (lastUrl.Host != currentUrl.Host || lastUrl.Port != currentUrl.Port)
{
string errorImagePath = context.Request.PhysicalApplicationPath + "image/1.jpg";
context.Response.WriteFile(errorImagePath);
}
else
{
context.Response.WriteFile(context.Request.PhysicalPath);
}
12.完整的handler代码如下:
public bool IsReusable
{
get
{
return true;
}
}
public void ProcessRequest(HttpContext context)
{
Uri lastUrl = context.Request.UrlReferrer;
Uri currentUrl = context.Request.Url;
if (lastUrl.Host != currentUrl.Host || lastUrl.Port != currentUrl.Port)
{
string errorImagePath = context.Request.PhysicalApplicationPath + "image/1.jpg";
context.Response.WriteFile(errorImagePath);
}
else
{
context.Response.WriteFile(context.Request.PhysicalPath);
}
}
13.在主项目web.config文件里边加入一下代码:
<system.webServer>
<handlers>
<add verb="*" path="image/*.jpg" type="T5防盗链.Handler1" name="plink"/>
</handlers>
</system.webServer>
14.13中type类型指的是命名.里边的名字
15.在主项目中添加一个web窗体,default,插入图片代码:
<div>
<img src="image/1.jpg" />
<img src="image/2.jpg" />
</div>
16.在辅项目中添加一个web窗体,代码如下:
<p>以下图片来自第一个站点</p>
<img src="https://localhost:44334/image/1.jpg" />
<img src="https://localhost:44334/image/2.jpg" />
17.辅项目中的路径是绝对位置
18.将两个项目同时启动,点击解决方案管理,右键属性,将单个启动设置为多个,然后启动我们要启动的项目:
19.防盗前
20.防盗后
21.给图片加水印
22.创建一个网站,准备其图片资源。
23.在图站中添加HtpHendere类,健承Htnatrr报口.
24.编写加水印的功能,代码如下:saplil class TestHandler : HttpHandler
25.水印图片
prvate const string WATERMARK _URL= -/mages/watermark png':
26.图片不存在,默认显示的图片
private const string DEFAULTIMAGE_URL= -/mags/detat ipg:public void ProcessRequestHttp(Context context)
27.得到用户请求的图片
System Drawing .Image Cover
28.”判断请求的物理路径中是否存在文件
if (File Exists(filePath))
29.加载文件
Cover = Image.romFile(filePath);
30.加载水印图片
lmae watemark = lmage Fomilelcontext Server MapPathWATERMARK URLI
31.实例化画布
Graphics 9二Graphics Fromlmage(Coven);
32.在image上绘制水印
g. Drawlmagelwatermark, new Rectangle(Cover Widthwatermark. Width,Cover.Height - wate
σV erHeight一watermark Height, Watermark Width, watermark Height1. 0,1 swatermark. Width, watermark. Height. GraphicsUnit Pixel);
g. Disposel();
33.释放水印图片
watermark. Dispose();
34.加载默认图片
Cover = Image FromFile(context Request MapPath(DEFAULTIMAGE URL)
35.设置输出格式
context. Response ContentType = "image/jpeg';
36.将图片存入输出流
Cover Save(context Response OutputStream. System Drawing Imaging ImageFormat Jpegl;Cover. Dispose():
context. Response End);
37.其他的都不需要改变了,咱们的水印就写完了