yuanws
posts - 22, comments - 17, trackbacks - 0, articles - 1
博客园
::
首页
::
新随笔
::
联系
::
订阅
::
管理
图片防盗链
Posted on 2007-12-25 09:16
yuanws
阅读(41)
评论(0)
编辑
收藏
自定义一个继承自httphandle的类
Code
1
using
System;
2
using
System.Web;
3
using
System.IO;
4
5
namespace
WebTj.Jhttphandle
6
{
7
/**/
///
<summary>
8
///
Httphandles 的摘要说明。
9
///
</summary>
10
public
class
Httphandles:IHttpHandler
11
{
12
public
Httphandles()
13
{
14
//
15
//
TODO: 在此处添加构造函数逻辑
16
//
17
}
18
public
void
ProcessRequest(System.Web.HttpContext context)
19
{
20
FileInfo file
=
new
System.IO.FileInfo(context.Request.PhysicalPath);
21
if
(context.Request.UrlReferrer
!=
null
&&
context.Request.UrlReferrer.Host
==
"
200.1.2.84
"
)
//
判断是否是本地引用,如果是则返回给客户端正确的图片,这里的判断就是用到了前面所述的http请求中所记路的参考页信息
22
{
23
context.Response.Expires
=
0
;
//
设置客户端缓冲中文件过期时间为0,即立即过期。
24
context.Response.Clear();
//
清空服务器端为此会话开辟的输出缓存
25
context.Response.ContentType
=
GetContentType(context.Request.PhysicalPath);
//
获得文件类型
26
context.Response.WriteFile(context.Request.PhysicalPath);
//
将请求文件写入到服务器端为此会话开辟的输出缓存中
27
context.Response.End();
//
将服务器端为此会话开辟的输出缓存中的信息传送到客户端
28
}
29
else
//
如果不是本地引用,则属于盗链引用,返回给客户端错误的图片
30
{
31
context.Response.Expires
=
0
;
//
设置客户端缓冲中文件过期时间为0,即立即过期。
32
context.Response.Clear();
//
清空服务器端为此会话开辟的输出缓存
33
context.Response.ContentType
=
GetContentType(
"
/Images/loading.gif
"
);
//
获得文件类型
34
context.Response.WriteFile(
"
/Images/loading.gif
"
);
//
将特殊的报告错误的图片文件写入到服务器端为此会话开辟的输出缓存中
35
context.Response.End();
//
将服务器端为此会话开辟的输出缓存中的信息传送到客户端
36
}
37
38
39
}
40
public
bool
IsReusable
41
{
42
get
43
{
44
return
true
;
45
}
46
}
47
48
protected
static
string
GetContentType(
string
strFileName)
49
{
50
string
strExtendName
=
strFileName.Substring(strFileName.LastIndexOf(
'
.
'
));
51
if
(strExtendName
==
""
)
52
{
53
return
""
;
54
}
55
string
strRet
=
""
;
56
switch
(strExtendName)
57
{
58
case
"
.*
"
: strRet
=
"
application/octet-stream
"
;
break
;
59
case
"
.001
"
: strRet
=
"
application/x-001
"
;
break
;
60
case
"
.301
"
: strRet
=
"
application/x-301
"
;
break
;
61
case
"
.323
"
: strRet
=
"
text/h323
"
;
break
;
62
case
"
.906
"
: strRet
=
"
application/x-906
"
;
break
;
63
case
"
.907
"
: strRet
=
"
drawing/907
"
;
break
;
64
case
"
.a11
"
: strRet
=
"
application/x-a11
"
;
break
;
65
case
"
.acp
"
: strRet
=
"
audio/x-mei-aac
"
;
break
;
66
case
"
.ai
"
: strRet
=
"
application/postscript
"
;
break
;
67
case
"
.aif
"
: strRet
=
"
audio/aiff
"
;
break
;
68
case
"
.aifc
"
: strRet
=
"
audio/aiff
"
;
break
;
69
case
"
.aiff
"
: strRet
=
"
audio/aiff
"
;
break
;
70
case
"
.anv
"
: strRet
=
"
application/x-anv
"
;
break
;
71
case
"
.asa
"
: strRet
=
"
text/asa
"
;
break
;
72
case
"
.asf
"
: strRet
=
"
video/x-ms-asf
"
;
break
;
73
case
"
.asp
"
: strRet
=
"
text/asp
"
;
break
;
74
case
"
.asx
"
: strRet
=
"
video/x-ms-asf
"
;
break
;
75
case
"
.au
"
: strRet
=
"
audio/basic
"
;
break
;
76
case
"
.avi
"
: strRet
=
"
video/avi
"
;
break
;
77
case
"
.awf
"
: strRet
=
"
application/vnd.adobe.workflow
"
;
break
;
78
case
"
.biz
"
: strRet
=
"
text/xml
"
;
break
;
79
case
"
.bmp
"
: strRet
=
"
application/x-bmp
"
;
break
;
80
case
"
.bot
"
: strRet
=
"
application/x-bot
"
;
break
;
81
case
"
.c4t
"
: strRet
=
"
application/x-c4t
"
;
break
;
82
case
"
.c90
"
: strRet
=
"
application/x-c90
"
;
break
;
83
case
"
.cal
"
: strRet
=
"
application/x-cals
"
;
break
;
84
case
"
.cat
"
: strRet
=
"
application/vnd.ms-pki.seccat
"
;
break
;
85
case
"
.cdf
"
: strRet
=
"
application/x-netcdf
"
;
break
;
86
case
"
.cdr
"
: strRet
=
"
application/x-cdr
"
;
break
;
87
case
"
.cel
"
: strRet
=
"
application/x-cel
"
;
break
;
88
case
"
.cer
"
: strRet
=
"
application/x-x509-ca-cert
"
;
break
;
89
case
"
.cg4
"
: strRet
=
"
application/x-g4
"
;
break
;
90
case
"
.cgm
"
: strRet
=
"
application/x-cgm
"
;
break
;
91
case
"
.cit
"
: strRet
=
"
application/x-cit
"
;
break
;
92
case
"
.class
"
: strRet
=
"
java/*
"
;
break
;
93
case
"
.cml
"
: strRet
=
"
text/xml
"
;
break
;
94
case
"
.cmp
"
: strRet
=
"
application/x-cmp
"
;
break
;
95
case
"
.cmx
"
: strRet
=
"
application/x-cmx
"
;
break
;
96
case
"
.cot
"
: strRet
=
"
application/x-cot
"
;
break
;
97
case
"
.crl
"
: strRet
=
"
application/pkix-crl
"
;
break
;
98
case
"
.crt
"
: strRet
=
"
application/x-x509-ca-cert
"
;
break
;
99
case
"
.csi
"
: strRet
=
"
application/x-csi
"
;
break
;
100
case
"
.css
"
: strRet
=
"
text/css
"
;
break
;
101
case
"
.cut
"
: strRet
=
"
application/x-cut
"
;
break
;
102
case
"
.dbf
"
: strRet
=
"
application/x-dbf
"
;
break
;
103
case
"
.dbm
"
: strRet
=
"
application/x-dbm
"
;
break
;
104
case
"
.dbx
"
: strRet
=
"
application/x-dbx
"
;
break
;
105
case
"
.dcd
"
: strRet
=
"
text/xml
"
;
break
;
106
case
"
.dcx
"
: strRet
=
"
application/x-dcx
"
;
break
;
107
case
"
.der
"
: strRet
=
"
application/x-x509-ca-cert
"
;
break
;
108
case
"
.dgn
"
: strRet
=
"
application/x-dgn
"
;
break
;
109
case
"
.dib
"
: strRet
=
"
application/x-dib
"
;
break
;
110
case
"
.dll
"
: strRet
=
"
application/x-msdownload
"
;
break
;
111
case
"
.doc
"
: strRet
=
"
application/msword
"
;
break
;
112
case
"
.dot
"
: strRet
=
"
application/msword
"
;
break
;
113
case
"
.drw
"
: strRet
=
"
application/x-drw
"
;
break
;
114
case
"
.dtd
"
: strRet
=
"
text/xml
"
;
break
;
115
//
case ".dwf": strRet = "Model/vnd.dwf";break;
116
case
"
.dwf
"
: strRet
=
"
application/x-dwf
"
;
break
;
117
case
"
.dwg
"
: strRet
=
"
application/x-dwg
"
;
break
;
118
case
"
.dxb
"
: strRet
=
"
application/x-dxb
"
;
break
;
119
case
"
.dxf
"
: strRet
=
"
application/x-dxf
"
;
break
;
120
case
"
.edn
"
: strRet
=
"
application/vnd.adobe.edn
"
;
break
;
121
case
"
.emf
"
: strRet
=
"
application/x-emf
"
;
break
;
122
case
"
.eml
"
: strRet
=
"
message/rfc822
"
;
break
;
123
case
"
.ent
"
: strRet
=
"
text/xml
"
;
break
;
124
case
"
.epi
"
: strRet
=
"
application/x-epi
"
;
break
;
125
case
"
.eps
"
: strRet
=
"
application/x-ps
"
;
break
;
126
//
case ".eps": strRet = "application/postscript";break;
127
case
"
.etd
"
: strRet
=
"
application/x-ebx
"
;
break
;
128
case
"
.exe
"
: strRet
=
"
application/x-msdownload
"
;
break
;
129
case
"
.fax
"
: strRet
=
"
image/fax
"
;
break
;
130
case
"
.fdf
"
: strRet
=
"
application/vnd.fdf
"
;
break
;
131
case
"
.fif
"
: strRet
=
"
application/fractals
"
;
break
;
132
case
"
.fo
"
: strRet
=
"
text/xml
"
;
break
;
133
case
"
.frm
"
: strRet
=
"
application/x-frm
"
;
break
;
134
case
"
.g4
"
: strRet
=
"
application/x-g4
"
;
break
;
135
case
"
.gbr
"
: strRet
=
"
application/x-gbr
"
;
break
;
136
case
"
.gcd
"
: strRet
=
"
application/x-gcd
"
;
break
;
137
case
"
.gif
"
: strRet
=
"
image/gif
"
;
break
;
138
case
"
.gl2
"
: strRet
=
"
application/x-gl2
"
;
break
;
139
case
"
.gp4
"
: strRet
=
"
application/x-gp4
"
;
break
;
140
case
"
.hgl
"
: strRet
=
"
application/x-hgl
"
;
break
;
141
case
"
.hmr
"
: strRet
=
"
application/x-hmr
"
;
break
;
142
case
"
.hpg
"
: strRet
=
"
application/x-hpgl
"
;
break
;
143
case
"
.hpl
"
: strRet
=
"
application/x-hpl
"
;
break
;
144
case
"
.hqx
"
: strRet
=
"
application/mac-binhex40
"
;
break
;
145
case
"
.hrf
"
: strRet
=
"
application/x-hrf
"
;
break
;
146
case
"
.hta
"
: strRet
=
"
application/hta
"
;
break
;
147
case
"
.htc
"
: strRet
=
"
text/x-component
"
;
break
;
148
case
"
.htm
"
: strRet
=
"
text/html
"
;
break
;
149
case
"
.html
"
: strRet
=
"
text/html
"
;
break
;
150
case
"
.htt
"
: strRet
=
"
text/webviewhtml
"
;
break
;
151
case
"
.htx
"
: strRet
=
"
text/html
"
;
break
;
152
case
"
.icb
"
: strRet
=
"
application/x-icb
"
;
break
;
153
case
"
.ico
"
: strRet
=
"
image/x-icon
"
;
break
;
154
//
case ".ico": strRet = "application/x-ico";break;
155
case
"
.iff
"
: strRet
=
"
application/x-iff
"
;
break
;
156
case
"
.ig4
"
: strRet
=
"
application/x-g4
"
;
break
;
157
case
"
.igs
"
: strRet
=
"
application/x-igs
"
;
break
;
158
case
"
.iii
"
: strRet
=
"
application/x-iphone
"
;
break
;
159
case
"
.img
"
: strRet
=
"
application/x-img
"
;
break
;
160
case
"
.ins
"
: strRet
=
"
application/x-internet-signup
"
;
break
;
161
case
"
.isp
"
: strRet
=
"
application/x-internet-signup
"
;
break
;
162
case
"
.IVF
"
: strRet
=
"
video/x-ivf
"
;
break
;
163
case
"
.java
"
: strRet
=
"
java/*
"
;
break
;
164
case
"
.jfif
"
: strRet
=
"
image/jpeg
"
;
break
;
165
case
"
.jpe
"
: strRet
=
"
image/jpeg
"
;
break
;
166
//
case ".jpe": strRet = "application/x-jpe";break;
167
case
"
.jpeg
"
: strRet
=