我想显示一个图片

本节内容适合已经掌握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


本页地址:http://www.foxtable.com/mobilehelp/topics/0015.htm