我想显示一个图片
本节内容适合已经掌握HTML的用户,其实不管你是否已经掌握HTML,建议你学习一下,因为:真的很简单!
在D盘建立一个名为web的目录,复制一个图片文件到这个目录,假定图片文件的名称是abc.jpg。
我们将HttpRequest事件的代码改为:
Dim
sb As
New
StringBuilder
sb.Appendline("我想显示一个图片<br/>")
sb.AppendLine("<img
src='abc.jpg'>")
e.WriteString(sb.ToString())
在浏览器显示的结果为:
img标签用于显示图片,其src属性为要显示的图片文件名称。
不过图片并没有显示,这是意料之中的,因为服务端并没有发送图片文件到浏览器。
浏览器其实是分两步来显示这个网页的:
1、首先获取网页内容:
我想显示一个图片<br/>
<img src='abc.jpg'>
2、然后浏览器解析网页内容,发现要显示一个图片"abc.jpg",如是又向服务器发送访问请求:
http://127.0.0.1/abc.jpg
要显示图片,服务器必须对这个访问请求对出响应,将后台的图片"abc.jpg"发送给客户端的浏览器,浏览器则显示收到的图片。
实际上不单单是图片,网页中引用的任何文件,包括js、css等等,都会单独向服务器发出下载这个文件的请求,服务器必须对此做出响应。
据此,我们修改HttpRequest事件代码为:
Dim
fl As
String =
"d:\web\" &
e.path '合成含路径的文件名
If
filesys.FileExists(fl) '如果是请求一个已经存在的文件
e.WriteFile(fl) '则发送此文件
Else
Dim sb
As New
StringBuilder
sb.Appendline("我想显示一个图片<br/><br/>")
sb.AppendLine("<img
src='abc.jpg'>")
e.WriteString(sb.ToString())
End
If
现在浏览器可以正常显示图片了:
提示:HttpRequest事件的WriteFile方法用于向客户端发送本地文件。
安全问题
上面的代码是不严谨的,因为用户可以下载"d:\web"目录下的所有文件,包括非图片文件。
我们需要进行一些判断,限制用户只能下载图片文件,为此可以将HttpRequest事件代码改为:
Dim
fl As
String =
"d:\web\" &
e.path
If
filesys.FileExists(fl) '如果是请求一个已经存在的文件
Dim idx
As Integer
= fl.LastIndexOf(".")
Dim ext
As String
= fl.SubString(idx)
Select Case
ext
Case
".jpg",".gif",".png",".bmp",".wmf"
'只允许请求图片文件
e.WriteFile(fl)
End
Select
Else
Dim sb
As New
StringBuilder
sb.Appendline("我想显示一个图片<br/><br/>")
sb.AppendLine("<img
src='abc.jpg'>")
e.WriteString(sb.ToString())
End
If