无组件图文混合上传示例

以下代码没有规范,还有些功能没完成,有那位高手能把它修改一下,封装成类则更是造福大众,或者以后有时间我会做的。有任何错误或建议请一定要给我发E-mail:[email protected],谢谢。
好了,少说多做,本示例在w2kServer,IIS5,SQL SERVER7中测试通过。
如有不明白的可到精华区查“图象”或“图片”关键字找到答案,或写信给我。
示例一共有三个文件:upload.htm(上传界面)
process.asp(处理程序)
showimg.asp(显示图象)
数据库:在pubs数据库中建立一个新表名为imgtest
字段名 类型 长度
----------------------------------------------
id int (自动编号)
img iamge
imginfo nchar 50

以下是三个文件的代码:

upload.htm
---------------------------------------------------------------------

 1<html>
 2<head>
 3<title>Untitled Document</title>
 4<meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
 5<style type="text/css">   
 6<!--   
 7td { font-size: 9pt}   
 8a { color: #000000; text-decoration: none}   
 9a:hover { text-decoration: underline}   
10.tx { height: 16px; width: 30px; border-color: black black #000000; border-top-width: 0px;   
11  
12border-right-width: 0px; border-bottom-width: 1px; border-left-width: 0px; font-size: 9pt;   
13  
14background-color: #eeeeee; color: #0000FF}   
15.bt { font-size: 9pt; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px;   
16  
17border-left-width: 0px; height: 16px; width: 80px; background-color: #eeeeee; cursor: hand}   
18.tx1 { height: 20px; width: 30px; font-size: 9pt; border: 1px solid; border-color: black black   
19  
20#000000; color: #0000FF}   
21\-->   
22</style>
23</head>
24<body bgcolor="#FFFFFF" text="#000000">
25<form action="process.asp" enctype="multipart/form-data" method="post" name="form1">
26<table align="center" border="1" bordercolordark="#CCCCCC" bordercolorlight="#000000" cellpadding="5" cellspacing="0" width="71%">
27<tr bgcolor="#CCCCCC">
28<td align="left" bgcolor="#CCCCCC" height="22" valign="middle"> Sobina   
29的图文上传界面</td>
30</tr>
31<tr align="left" bgcolor="#eeeeee" valign="middle">
32<td bgcolor="#eeeeee"> <br/>
33</td>
34</tr>
35<tr align="center" valign="middle">
36<td align="left" height="122" id="upid">
37<p>图象路径:   
38<input class="tx1" name="img" style="width:400" type="file" value=""/>
39</p>
40<p>图象说明:   
41<input name="imginfo" type="text"/>
42</p>
43</td>
44</tr>
45<tr align="center" bgcolor="#eeeeee" valign="middle">
46<td bgcolor="#eeeeee" height="2">
47<input class="bt" name="Submit" type="submit" value="· 提交 ·"/>
48<input class="bt" name="Submit2" type="reset" value="· 重置 ·"/>
49</td>
50</tr>
51</table>
52</form>
53</body>
54</html>

------------------------------------------------------------------------
process.asp
------------------------------------------------------------------------

 1   
 2response.expires=0   
 3'目的:将二进制字符转换成普通字符   
 4Function bin2str(binstr)   
 5Dim varlen,clow,ccc,skipflag   
 6skipflag=0   
 7ccc = ""   
 8varlen=LenB(binstr)   
 9For i=1 To varlen   
10If skipflag=0 Then   
11clow = MidB(binstr,i,1)   
12If AscB(clow) > 127 Then   
13ccc =ccc & Chr(AscW(MidB(binstr,i+1,1) & clow))   
14skipflag=1   
15Else   
16ccc = ccc & Chr(AscB(clow))   
17End If   
18Else   
19skipflag=0   
20End If   
21Next   
22bin2str = ccc   
23End Function   
24  
25'目的:把表单中的图象数据分离出来   
26'其中参数formsize为表单数据大小,formdata为表单的总数据   
27Function ImageUp(formsize,formdata)   
28bncrlf=chrb(13) & chrb(10)   
29divider=leftb(formdata,instrb(formdata,bncrlf)-1) 'formdata第一个bncrlf左边的数据   
30datastart=instrb(formdata,bncrlf & bncrlf)+4 '两个bncrlf右边的数据的起始位   
31dataend=instrb(datastart+1,formdata,divider)-datastart   
32Imageup=midb(formdata,datastart,dataend)   
33End Function   
34  
35'目的:把表单中的变量值取出   
36'其中参数varName为要寻找的字段变量,strTXT为已从图象中分离出来的的所有文本   
37Function findVar(varName,strTxt)   
38startPos=1   
39strLen=len(varName)+2   
40'表单中可能有多个同名变量(用在有主表与明细表中的数据更新中)   
41for i=1 to len(strTXT)   
42varStart=instr(startPos,strTXT,varName)+strLen+3   
43varEnd=instr(varStart,strTXT,"--")-2   
44varValLen=varEnd-varStart   
45  
46inVar=mid(strTXT,varStart,varValLen)   
47findVar=findVar & inVar   
48  
49startPos=instr(varStart,strTXT,varName)   
50if startPos=0 then exit for '如果找不到则退出循环   
51findVar=findVar & "," ' 以","作为多个同名变量值间的分隔符,实际上本例倒不需要   
52next   
53  
54End function   
55  
56FormSize = Request.TotalBytes   
57FormData = Request.BinaryRead( FormSize )   
58Image = ImageUp(FormSize,Formdata)   
59  
60'以下两步不能省略,否则取不出文字   
61strTXT=mid(formdata,instr(formdata,image)+len(image)+1) '取出文字   
62strTXT=bin2str(strTXT) '二进制转换成普通文字   
63  
64imginfo=findVar("imginfo",strTXT) '相当于request.form("imginfo")   
65'MyArray = Split(imginfo, ",", -1, 1) '分离从imginfo返回的多个值,在本例子中不用   
66  
67Application.Lock   
68set objCnn=Server.CreateObject("ADODB.Connection")   
69objCnn.Open strCnn   
70set rec=Server.CreateObject("ADODB.Recordset")   
71rec.Open "imgtest",objCnn,1,3   
72rec.addnew '如果你只想更新一个记录,则可使这句失效   
73rec("imginfo")=imginfo   
74if Len(Image)>1 then   
75rec("img").Appendchunk Image '把图象写入数据库   
76end if   
77rec.update   
78rec.close:set rec=nothing   
79set objCnn=Nothing   
80Application.Unlock   
81'输出图象说明和图象   
82response.write imginfo   
83response.write "

<img boder="0" src='showimg.asp?imginfo=" &amp; imginfo &amp; "'/>

1"   

-----------------------------------------------------------------------
showimg.asp
-----------------------------------------------------------------------

 1   
 2response.expires=0   
 3response.buffer=true   
 4response.clear   
 5Response.ContentType = "image/*"   
 6  
 7set objCnn=server.CreateObject("ADODB.connection")   
 8objCnn.Open strCnn   
 9  
10strsql="SELECT * FROM imgtest where imginfo='" & Request.QueryString("imginfo") & "'"   
11set rec=objCnn.Execute(strsql)   
12  
13Response.BinaryWrite rec("img")   
14  
15rec.close:set rec=nothing   
16set objCnn=nothing   
Published At
Categories with Web编程
Tagged with
comments powered by Disqus