让网站更具人性化──用ASP进行图片的上传与管理
#1 一、关于组件
这里首先介绍一下我们使用的这个免费组件:LyfUpload.dll。它来自“VB爱好者”网站(http://vbfans.yeah.net)。这个组件可以限制上传文件的大小和类型;支持多文件上传与文件的更名保存;在WIN98+PWS、NT+IIS3.0/4.0或者WIN2000+IIS5.0下都可以很好地工作,最重要的是可以免费使用。将下载的ZIP文件解压后,使用“regsvr32 lyfupload.dll”语句注册组件后,便可以在ASP中使用常规的方法使用了。另外,文件包中有详细的说明文档和相关例程。
#1 二、设置数据库
真正的ASP站点一定会有后台数据库的支持,同样,我们也要把用户提交图片的相关信息保存到数据库中。上文已经提到,不能将图片支持存储到数据表中。解决的办法是设置一个“photo”字段,它的数据类型是普通的文本型,将字段的缺省值设为0,在此字段中只保存图片的路径和文件名,即在每一条记录里。如果用户没有上传图片则photo字段为0;如果已经上传图片,则显示路径和文件名。另外,如果将所有上传图片都保存到同一个目录下,则有可能发生重名现象,从而引发不能正确显示的错误。解决的办法是设置一个“userid”字段,其数据类型是自动编号,此字段将自动为每一个注册用户分配一个唯一的ID号作为用户标识。在真正接收图片之前利用组件将图片的文件名更改为userid字段中的ID号,然后再进行保存。这便可以保证用户与其上传的图片能够正确的关联。
#1 三、用户上传界面的编写
为了接受用户的上传,我们需要编写两个ASP文件。一个是处理登录信息及给用户提供上传界面的文件,一个是处理和接收上传信息的文件。我们先介绍一下用户上传界面的文件,首先需要说明的是能够进入这个文件的用户应该是已经注册过的,否则此用户便没有ID号,所以在进入之前用户必须填写自己的用户名和密码,在此文件中也要检验用户名和密码的正确性。下面是此文件的源代码:
<!--#include file="dbconn.asp"--> '此包含文件是数据库的连接语句
<% sql="select *from user where username='" & Request("user_name")& "'"
set Rs=conn.Execute(sql)
if Request("user_name") ="" or Request("pwd") ="" then
Response.Redirect"memberin.htm"
end if %>
<html>
<head>
<title>会员图片上传</title>
</head>
<body>
<% If Rs.Bof OR Rs.Eof Then
Response. Write"<html><body><center>我们的数据库中没有查到你的用户名,请先注册新用户<p>"
Response.Write"<a href='login.htm'>注册新用户</a>"
Response.Write"</center></body></html>"
Else
If trim(Request("pwd" )) <>Rs("pwd" ) Then
Response. Write"<html><body><center>密码出错,请检查是否大小写不对。<p>"
Response.Write"<a href='memberin.htm'> 返回 </a>"
Response.Write"</center></body></html>"
else
%>
<form name="frmUpload" Method="Post" Enctype="multipart/form-data" Action="upload.asp" >
<table>
<tr>
<td >选择照片:</td>
<td ><input type="file" name="file1" size=20 class="td"></td>
<td ><INPUT TYPE="Submit" VALUE="上传"></ td></tr>
<tr>
<td colspan="3">
<input type="hidden" name="userid" value="<%=rs("userid") %>"></td>
</tr></table></form>
<% end if
end if
conn.Close
set conn=nothing %>
</body></html>
其中,表单域“file1”可以提供对话框让用户选择需要上传的图片;另外,我们设置了一个隐含的表单域“userid”读入此用户的ID号以便upload.asp文件使用。
#1 四、upload.asp文件的编写
在upload.asp文件中我们将调用LyfUpload.dll组件来处理和接收上传的图片信息,并将图片更名后保存到photo字段中。下面是upload.asp的源代码:
<!--#include file="dbconn.asp"-->
<html>
<head>
<title>会员图片上传</title>
</head>
<body>
<table>
<tr>
<td>
<% Set obj = Server.CreateObject("LyfUpload.UploadFile")
obj.maxsize=50000
obj.extname="gif, jpg "
txt = obj.request("userid")
ss=obj.SaveFile("file1", "c:\inetpub\wwwroot\photo",obj.request("userid"))
aa=obj.filetype?煟?"file1")
path="photo/" & txt
if ss= "" then
Response.Write ("请选择相应的文件!")
elseif ss= "0" then
Response.Write("<font size=4>文件尺寸过大!</font>")
else
Response.Write "<font size=4>选择的文件已经上传到服务器!</font>"
Response.Write("<p>文件名称:" & ss)
Response.Write("<br>文件格式:" & aa)
Response.Write("<br>文件大小:" & obj.FileSize)
end if %>
</td></tr></table>
<% Dim SQL
SQL = "Update user " & "Set" & "photo="
SQL = SQL & "'" &path& "'"
SQL = SQL & " where userid=" & txt
Conn.Execute SQL
conn.Close
set conn=nothing %>
</body>
</html>
其中“obj.maxsiz”与“obj.extname”分别规定了上传图片的大小和类型;“ss=obj.SaveFile("file1", " c:?焅inetpub\wwwroot\photo",obj.request("userid" ))”的意思是将用户选择的图片更名为其ID号然后保存到主目录下的Photo目录里;最后的那一部分ASP语句是将图片的路径和文件名写入到数据库的photo字段中。
#1 五、图片的显示
在需要显示图片的.asp文件中写入这样的代码:
<!--#include file="dbconn.asp"-->
<% if rs("photo" ) <>"0" then%>
<img src="photo/<%=rs("photo" )%>" width="250" height="320" border="2">
<% else
Response.Write "没有照片"
end if %>
需要说明的只有一点,就是应在代码中对图片的长宽加以规定,即以统一的尺寸来显示图片,这样才不至于破坏整体页面显示。
到此我们已经完成了图片的上传、接收和显示,实际上,不仅仅是图片,其他可以上传的文件也可做类似的处理。另外在实际应用中,我们还能够依靠组件和数据库的强大功能作更为丰富的设计。如果你对此有什么问题或要求,可以通过Swjin@21cn.com和我联系。??