Asp+SQL Server的图片存储及调用问题?(不要存储路径的) 各位大哥,人命关天,做不出就要……signhelp me 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 100分给我我一定帮你借解决(因为我已经解决了数据库图像存储与页面显示,不过是在sql server 数据库中的)[email protected] 到www.dev-club.com上去搜索一下,那里面有几篇这样的文章!无组件图片与文本同步存入数据库的最简单的办法发表版主:pccat发表时间:2001-9-11 12:43:59来自:asphouses一:前言 首先,没有料到图片与文本的上传会引起这么大的注意。上一篇贴子(Id=435906)贴出后,有不少人来信说看不懂。或是仍然不能实现。我就以一种完全简单的手法。完成无组件的文本与图片上传数据库所有过程。希望能帮助所有对此有疑问的网友。二:准备工作 按照惯例,我先将我的测试环境告诉大家。 系统:Win98se + pws + asp 编程环境:Visual Interdev 6.0 数据库:Access2000 (因为网友问的最多的都是Access2000的问题。) 建一个库:access2000中,先建好一个Test.mdb的数据库。具体有四个字段。 id ¦ text1 ¦ text2 ¦ img 自动编号 文本 文本 OLE对象 ’如果是sql server 则选择(image即可)三:Are you ready ,Go!!!3-1.建上传表单: 我们知道,图像与文本是两种不同制式的文件(二进制,流式文本)而如果要同一表单提交的话,(file格式提交)则我们获取时就不能用原来的方法request.form而必须用equest.TotalBytes来获得所有的提交资料。但这时两种格式的文件混合在一起比较难分。我的上一贴已经告诉大家用二进制的方法来分开这些资料。但十分麻烦,要用到许多二进值的函数,所以许多网友来信问我有没有更简单的方法,好。我可以告诉大家,有!而且保证下面的方法保证一学就会。(这种方法很另类但伟人说过白猫,黑猫。能上网的就是好猫!)upload.asp(具体代码如下) <% @ language=vbscript %><html><head><meta name="VI60_defaultClientScript" content="VBScript"><title> File Upload </title><script ID="clientEventHandlersVBS" LANGUAGE="vbscript"><!-- Sub form2_onsubmit //** 这里是关键,当form2在提交的过程中时,即活form1的提交 form1.submit //**所以我们这里用了两个表单,但只用一个提交就可以了。End Sub--></script></head><body><form name="form1" ENCTYPE="multipart/form-data" ACTION="upimage.asp" METHOD="POST" target="_blank">Please choose a picture to upload: <br><input NAME="picture" TYPE="FILE"> <br></form><form name="form2" action="uptext.asp" method="post"><input type="text" name="text1"><br><input type="text" name="text2"><br><input type="submit" value="提交"></form></body></html>3-2 兵分两路来处理数据。 首先,文本很简单。uptext.asp (代码如下)<% @ language=vbscript %><%strconn="driver={microsoft access driver (*.mdb)};dbq="&server.MapPath("test.mdb")text1=request.form("text1")text2=request.form("text2")response.write text1response.write text2set rs=Server.CreateObject("adodb.recordset")sql="SELECT top 1 * FROM imgtable ORDER BY id DESC" ’这里的意思是选择最后一个Id,既刚刚被改动rs.Open sql,strconn,1,3 ’就是你上传的图像的两个文本字段。rs("text1")=text1 ’注意,这里是改动不是添加,所以不用addnew。rs("text2")=text2rs.Updaters.Close%> 接着,来处理图像。upimage.asp (具体代码如下)<%FormSize = Request.TotalBytes ’得到数据FormData = Request.BinaryRead( FormSize )function ImageUp(formsize,formdata) ’这个函数的功能是截取其中的图像部分。 bncrlf=chrb(13) & chrb(10) ’做成函数后。以后你可以自己随意使用了。 divider=leftb(formdata,instrb(formdata,bncrlf)-1) datastart=instrb(formdata,bncrlf&bncrlf)+4 dataend=instrb(datastart+1,formdata,divider)-datastart imageup=midb(formdata,datastart,dataend)end functionImage=ImageUp (FormSize,Formdata) ’这里就是图像部分了。set rs=server.CreateObject("adodb.recordset")strconn="driver={microsoft access driver (*.mdb)};dbq="&server.MapPath("test.mdb")sql="SELECT * FROM imgtable"rs.Open sql,strconn,1,3rs.AddNew ’因为表单二在表单一提交的过程中下提交了。rs("img").appendchunk Image ’所以这里是添加。rs.Updaters.Closeresponse.contenttype="image/gif" response.binarywrite imageup(formsize,formdata) ’这里是显示图像。表示成功!%>啊?!?!原来如此简单!四:“显示,我要同页显示”终于完成了图文同步提交。(真的是同步吗?不是吗?是吗? 唉,我们只是为了解决问题。何必当真哪?不是 吗?)现在我们还要让他同页显示出来。其实,这是同样的思路。我们也用两页来完成。主页面:show.asp<%@ Language=VBScript %><% strconn="driver={microsoft access driver (*.mdb)};dbq="&server.MapPath("test.mdb")set rs=Server.CreateObject("adodb.recordset")sql="SELECT top 1 * FROM imgtable ORDER BY id DESC"rs.Open sql,strconn,1,3%><html><body>以下是你的上传资料。<br>文本一:<% Response.Write rs("text1") %><br>文本二:<% Response.Write rs("text2") %><br>你的图像:<img src=showimg.asp?id=<%=rs("id")%>> ’注意这里,这才是关键。他可以实现网页图像与文本</body> ’共存。 </html>幕后页面:showimg.asp (说他是幕后的页面,因为他潜伏在主页面里。看上是一个页面一样)<%@ Language=VBScript %><%strconn="driver={microsoft access driver (*.mdb)};dbq="&server.MapPath("test.mdb")id=Request("id")set rs=server.CreateObject("adodb.recordset")sql="SELECT * FROM imgtable where id="&idrs.Open sql,strconn,1,3response.contenttype="image/gif"Response.BinaryWrite rs("img")%>(全文完:希望本文能帮助那些急于想解决本类问题的网友。) 强烈推荐数据库中对图片的操作,http://stady.51.net/webnet/asp/tech/01110503.htm http://stady.51.net/webnet/asp/tech/01110503.htm 我要的是asp+sql server的哪位有指教,一定给分,再加100都可以 100分给我我一定帮你借解决(因为我已经解决了数据库图像存储与页面显示,不过是在sql server 数据库中的)[email protected] 我做个一个标志征集ASP,FOR SQL SERVER2000的=======input.asp<%Option ExplicitDim Name , Station , Email , ContextName = Request.Form("name")Station = Request.Form("station")Email = Request.Form("email")Context = Request.Form("context")%><html><head><title>标志征集启事</title><meta http-equiv="Content-Type" content="text/html; charset=gb2312"><link rel="stylesheet" href="style.css" type="text/css"></head><body bgcolor="#F7E7C7" text="#000000"><table width="448" border="0" cellspacing="0" cellpadding="0" align="center"> <tr> <td width="519" height="23" align="center"><img src="title1.jpg" width="500" height="40"></td> </tr> <tr> <td width="519" height="22" valign="top"> <hr> </td> </tr> <tr> <td width="519" height="22"> <hr> </td> </tr> <tr> <td width="519" align="center" valign="middle"> <form name="input" method="post" action="updata.asp" enctype="multipart/form-data"> <table width="90%" border="0" cellspacing="0" cellpadding="4"> <tr> <td width="21%" height="20" align="right">姓 名:</td> <td width="79%" height="20"> <input class=border type="text" name="name" size="10" value="<%=Name%>"> </td> </tr> <tr> <td width="21%" height="20" align="right">详细地址:</td> <td width="79%" height="20"> <input class=border type="text" name="station" size="30" value="<%=Station%>"> </td> </tr> <tr> <td width="21%" height="20" align="right">电子邮件:</td> <td width="79%" height="20"> <input class=border type="text" name="email" value="<%=Email%>"> </td> </tr> <tr> <td width="21%" height="20" align="right">标志图片:</td> <td width="79%" height="20"> <input class=border type="file" name="image"> </td> </tr> <tr> <td width="21%" height="20" align="right">说 明:</td> <td width="79%" height="20"> <textarea class="border" name="context" cols="50" rows="5"><%=Context%></textarea> </td> </tr> <tr align="center"> <td colspan="2" height="20"> <input style="BORDER-RIGHT: rgb(0,0,0) 1px solid; BORDER-TOP: rgb(0,0,0) 1px solid; BORDER-LEFT: rgb(0,0,0) 1px solid; COLOR: #ffffff; BORDER-BOTTOM: rgb(0,0,0) 1px solid; BACKGROUND-COLOR: #0099cc" type="submit" name="Submit" value="确定"> <input style="BORDER-RIGHT: rgb(0,0,0) 1px solid; BORDER-TOP: rgb(0,0,0) 1px solid; BORDER-LEFT: rgb(0,0,0) 1px solid; COLOR: #ffffff; BORDER-BOTTOM: rgb(0,0,0) 1px solid; BACKGROUND-COLOR: #0099cc" type="reset" name="Submit2" value="取消"> <a href="list.asp">我还是先看看别人的投稿</a> </td> </tr> </table> </form> </td> </tr> <tr> <td width="519" height="22" valign="top"> <hr> </td> </tr></table></body></html>========================updata.asp<%Option Explicit%><!--#include file ="upload.asp"--><%Dim FormSize , FormData , Fields , ImgSize , ImgType , ImgData , SQL , Name , Email , Station , Context , MessTextFormSize = Request.TotalBytesFormData = Request.BinaryRead(FormSize)Set Fields = GetUpload(FormData)Name = RemoveHtmlStyle(Fields("name").Value)Email = RemoveHtmlStyle(Fields("email").Value)Station = RemoveHtmlStyle(Fields("station").Value)Context = RemoveHtmlStyle(Fields("context").Value)Response.Write "<form name='webaddform' method='post' action='input.asp'>"Response.Write " <Input type=hidden Name=name value=" & Fields("name").Value & ">"Response.Write " <Input type=hidden Name=email value=" & Fields("email").Value & ">"Response.Write " <Input type=hidden Name=station value=" & Fields("station").Value & ">"Response.Write " <Input type=hidden Name=context value=" & Fields("context").Value & ">"Response.Write "</form>"MessText = CheckWebAddInput(name,email,station,context)If MessText <> "" Then Response.Write "<script>window.alert('" & MessText & "');document.webaddform.submit();</script>" Response.EndEnd IfSQL = "Select * From LongMan Where ID Is Null"Rs.Open SQL,Connect,1,3Rs.AddNewImgSize = Fields("image").lengthImgType = Fields("image").ContentTypeImgData = Fields("image").ValueIf ImgType <> "image/pjpeg" And ImgType <> "image/gif" Then MessText = "您要投稿的图片呢?" Response.Write "<script>window.alert('" & MessText & "');document.webaddform.submit();</script>"Else Rs("Image").AppendChunk ImgData Rs("ImageSize") = ImgSizeEnd IfRs("Name") = NameRs("Email") = EmailRs("Context") = ContextRs("Station") = StationRs.UpdateRs.CloseResponse.Write "<script>window.alert('投稿成功!您的投稿在审核后将发布,请等待好消息!');document.webaddform.submit();</script>"%>========upload.asp<SCRIPT RUNAT=SERVER LANGUAGE=VBSCRIPT>Function GetUpload(FormData) Dim DataStart,DivStr,DivLen,DataSize,FormFieldData,PosOpenBoundary,PosCloseBoundary,FieldNameStart,FieldNameSize,FormFieldName Dim FieldFileNameStart,FormFileName,FieldFileCTStart,FormFileCT,Field,FieldFileNameSize,FieldFileCTSize '分隔标志串(+CRLF) DivStr = LeftB(FormData,InStrB(FormData,str2bin(VbCrLf)) + 1) '分隔标志串长度 DivLen = LenB(DivStr) PosOpenBoundary = InStrB(FormData,DivStr) PosCloseBoundary = InStrB(PosOpenBoundary + 1,FormData,DivStr) Set Fields = CreateObject("Scripting.Dictionary") While PosOpenBoundary > 0 And PosCloseBoundary > 0 'name起始位置(name="xxxxx"),加6是因为[name="]长度为6 FieldNameStart = InStrB(PosOpenBoundary,FormData,str2bin("name=")) + 6 FieldNameSize = InStrB(FieldNameStart,FormData,ChrB(34)) - FieldNameStart '(")的ASC值=34 FormFieldName = bin2str(MidB(FormData,FieldNameStart,FieldNameSize)) 'filename起始位置(filename="xxxxx") FieldFileNameStart = InStrB(PosOpenBoundary,FormData,str2bin("filename=")) + 10 If FieldFileNameStart < PosCloseBoundary And FieldFileNameStart > PosopenBoundary Then FieldFileNameSize = InStrB(FieldFileNameStart,FormData,ChrB(34)) - FieldFileNameStart '(")的ASC值=34 FormFileName = bin2str(MidB(FormData,FieldFileNameStart,FieldFileNameSize)) Else FormFileName = "" End If 'Content-Type起始位置(Content-Type: xxxxx) FieldFileCTStart = InStrB(PosOpenBoundary,FormData,str2bin("Content-Type:")) + 14 If FieldFileCTStart < PosCloseBoundary And FieldFileCTStart > PosOpenBoundary Then FieldFileCTSize = InStrB(FieldFileCTStart,FormData,str2bin(VbCrLf & VbCrLf)) - FieldFileCTStart FormFileCT = bin2str(MidB(FormData,FieldFileCTStart,FieldFileCTSize)) Else FormFileCT = "" End If '数据起始位置:2个CRLF开始 DataStart = InStrB(PosOpenBoundary,FormData,str2bin(VbCrLf & VbCrLf)) + 4 If FormFileName <> "" Then '数据长度,减1是因为数据文件的存取字节数问题(可能是AppendChunk方法的问题): '由于字节数为奇数的图象存到数据库时会去掉最后一个字符导致图象不能正确显示, '字节数为偶数的数据文件就不会出现这个问题,因此必须保持字节数为偶数。 DataSize = InStrB(DataStart,FormData,DivStr) - DataStart - 1 FormFieldData = MidB(FormData,DataStart,DataSize) Else '数据长度,减2是因为分隔标志串前有一个CRLF DataSize = InStrB(DataStart,FormData,DivStr) - DataStart - 2 FormFieldData = bin2str(MidB(FormData,DataStart,DataSize)) End If '建立一个Dictionary集存储Form中各个Field的相关数据 Set Field = CreateUploadField() Field.Name = FormFieldName Field.FilePath = FormFileName Field.FileName = GetFileName(FormFileName) Field.ContentType = FormFileCT Field.Length = LenB(FormFieldData) Field.Value = FormFieldData Fields.Add FormFieldName, Field PosOpenBoundary = PosCloseBoundary PosCloseBoundary = InStrB(PosOpenBoundary + 1,FormData,DivStr) Wend Set GetUpload = FieldsEnd Function'把二进制字符串转换成普通字符串函数Function bin2str(binstr) Dim varlen,clow,ccc,skipflag,i '中文字符Skip标志 skipflag=0 ccc = "" If Not IsNull(binstr) Then varlen=LenB(binstr) For i=1 To varlen If skipflag=0 Then clow = MidB(binstr,i,1) '判断是否中文的字符 If AscB(clow) > 127 Then 'AscW会把二进制的中文双字节字符高位和低位反转,所以要先把中文的高低位反转 ccc =ccc & Chr(AscW(MidB(binstr,i+1,1) & clow)) skipflag=1 Else ccc = ccc & Chr(AscB(clow)) End If Else skipflag=0 End If Next End If bin2str = cccEnd Function'把普通字符串转成二进制字符串函数Function str2bin(varstr) Dim I,varchar,varasc,varlow,varhigh str2bin="" For i=1 To Len(varstr) varchar=mid(varstr,i,1) varasc = Asc(varchar) ' asc对中文字符求出来的值可能为负数, ' 加上65536就可求出它的无符号数值 ' -1在机器内是用补码表示的0xffff, ' 其无符号值为65535,65535=-1+65536 ' 其他负数依次类推。 If varasc<0 Then varasc = varasc + 65535 End If '对中文的处理:把双字节低位和高位分开 If varasc>255 Then varlow = Left(Hex(Asc(varchar)),2) varhigh = right(Hex(Asc(varchar)),2) str2bin = str2bin & chrB("&H" & varlow) & chrB("&H" & varhigh) Else str2bin = str2bin & chrB(AscB(varchar)) End If NextEnd Function'取得文件名(去掉Path)Function GetFileName(FullPath) If FullPath <> "" Then FullPath = StrReverse(FullPath) FullPath = Left(FullPath, InStr(1, FullPath, "\") - 1) GetFileName = StrReverse(FullPath) Else GetFileName = "" End IfEnd Function</SCRIPT><SCRIPT RUNAT=SERVER LANGUAGE=JSCRIPT>function CreateUploadField(){ return new uf_Init() }function uf_Init(){ this.Name = null this.FileName = null this.FilePath = null this.ContentType = null this.Value = null this.Length = null}</SCRIPT> 求SQL文 怎么判断一个表的列数据都是空的 如何给不同的登录者设置不同的表操作权限 利用SQL Server自动发送邮件的功能 SQL Server自定義函數中不能使用GETDATE()? SQL分号截取问题。 求一张表拆分成几张表的sql语句 在线等 sql中怎样取出十二个月中某一列出现次数最多的值 sql mail触发能否不和exchange配合? 如何将数据表和存储过程的所有者修改为dbo用户? sql server中怎样获得统计表中列的数量,有这样的函数吗?61分 我的分全给了 ms sql server急!!
[email protected]
无组件图片与文本同步存入数据库的最简单的办法发表版主:pccat
发表时间:2001-9-11 12:43:59来自:asphouses
一:前言 首先,没有料到图片与文本的上传会引起这么大的注意。上一篇贴子(Id=435906)贴出后,有不少人来信说看不
懂。或
是仍然不能实现。我就以一种完全简单的手法。完成无组件的文本与图片上传数据库所有过程。希望能帮助所有对
此有疑
问的网友。二:准备工作 按照惯例,我先将我的测试环境告诉大家。
系统:Win98se + pws + asp
编程环境:Visual Interdev 6.0
数据库:Access2000 (因为网友问的最多的都是Access2000的问题。)
建一个库:access2000中,先建好一个Test.mdb的数据库。具体有四个字段。
id ¦ text1 ¦ text2 ¦ img
自动编号 文本 文本 OLE对象 ’如果是sql server 则选择(image即可)三:Are you ready ,Go!!!3-1.建上传表单:
我们知道,图像与文本是两种不同制式的文件(二进制,流式文本)而如果要同一表单提交的话,(file格式
提交)则
我们获取时就不能用原来的方法request.form而必须用equest.TotalBytes来获得所有的提交资料。但这时两种格
式的文件
混合在一起比较难分。我的上一贴已经告诉大家用二进制的方法来分开这些资料。但十分麻烦,要用到许多二进值
的函
数,所以许多网友来信问我有没有更简单的方法,好。我可以告诉大家,有!而且保证下面的方法保证一学就会。
(这种方
法很另类但伟人说过白猫,黑猫。能上网的就是好猫!)upload.asp(具体代码如下)
<% @ language=vbscript %>
<html>
<head>
<meta name="VI60_defaultClientScript" content="VBScript">
<title> File Upload </title>
<script ID="clientEventHandlersVBS" LANGUAGE="vbscript">
<!--
Sub form2_onsubmit //** 这里是关键,当form2在提交的过程中时,即活form1的提交
form1.submit //**所以我们这里用了两个表单,但只用一个提交就可以了。
End Sub
-->
</script>
</head>
<body><form name="form1" ENCTYPE="multipart/form-data" ACTION="upimage.asp" METHOD="POST"
target="_blank">
Please choose a picture to upload: <br>
<input NAME="picture" TYPE="FILE"> <br>
</form><form name="form2" action="uptext.asp" method="post">
<input type="text" name="text1"><br>
<input type="text" name="text2"><br>
<input type="submit" value="提交">
</form></body>
</html>3-2 兵分两路来处理数据。
首先,文本很简单。uptext.asp (代码如下)<% @ language=vbscript %>
<%
strconn="driver={microsoft access driver (*.mdb)};dbq="&server.MapPath("test.mdb")text1=request.form("text1")
text2=request.form("text2")
response.write text1
response.write text2set rs=Server.CreateObject("adodb.recordset")
sql="SELECT top 1 * FROM imgtable ORDER BY id DESC" ’这里的意思是选择最后一个Id,既刚刚被改动
rs.Open sql,strconn,1,3 ’就是你上传的图像的两个文本字段。rs("text1")=text1 ’注意,这里是改动不是添加,所以不用
addnew。
rs("text2")=text2
rs.Update
rs.Close
%>
接着,来处理图像。
upimage.asp (具体代码如下)<%
FormSize = Request.TotalBytes ’得到数据
FormData = Request.BinaryRead( FormSize )function ImageUp(formsize,formdata) ’这个函数的功能是截取其中的图像部分。
bncrlf=chrb(13) & chrb(10) ’做成函数后。以后你可以自己随意使用了。
divider=leftb(formdata,instrb(formdata,bncrlf)-1)
datastart=instrb(formdata,bncrlf&bncrlf)+4
dataend=instrb(datastart+1,formdata,divider)-datastart
imageup=midb(formdata,datastart,dataend)
end functionImage=ImageUp (FormSize,Formdata) ’这里就是图像部分了。set rs=server.CreateObject("adodb.recordset")
strconn="driver={microsoft access driver (*.mdb)};dbq="&server.MapPath("test.mdb")
sql="SELECT * FROM imgtable"
rs.Open sql,strconn,1,3rs.AddNew ’因为表单二在表单一提交的过程中下提交了。
rs("img").appendchunk Image ’所以这里是添加。
rs.Update
rs.Close
response.contenttype="image/gif"
response.binarywrite imageup(formsize,formdata) ’这里是显示图像。表示成功!%>啊?!?!原来如此简单!四:“显示,我要同页显示”
终于完成了图文同步提交。(真的是同步吗?不是吗?是吗? 唉,我们只是为了解决问题。何必当真哪?不
是 吗?)
现在我们还要让他同页显示出来。其实,这是同样的思路。我们也用两页来完成。主页面:show.asp<%@ Language=VBScript %>
<%
strconn="driver={microsoft access driver (*.mdb)};dbq="&server.MapPath("test.mdb")set rs=Server.CreateObject("adodb.recordset")
sql="SELECT top 1 * FROM imgtable ORDER BY id DESC"
rs.Open sql,strconn,1,3
%>
<html>
<body>
以下是你的上传资料。<br>
文本一:<% Response.Write rs("text1") %><br>
文本二:<% Response.Write rs("text2") %><br>你的图像:
<img src=showimg.asp?id=<%=rs("id")%>> ’注意这里,这才是关键。他可以实现网页图像与文本
</body> ’共存。
</html>幕后页面:showimg.asp (说他是幕后的页面,因为他潜伏在主页面里。看上是一个页面一样)<%@ Language=VBScript %>
<%
strconn="driver={microsoft access driver (*.mdb)};dbq="&server.MapPath("test.mdb")
id=Request("id")
set rs=server.CreateObject("adodb.recordset")
sql="SELECT * FROM imgtable where id="&id
rs.Open sql,strconn,1,3
response.contenttype="image/gif"
Response.BinaryWrite rs("img")
%>(全文完:希望本文能帮助那些急于想解决本类问题的网友。)
http://stady.51.net/webnet/asp/tech/01110503.htm
我要的是asp+sql server的
哪位有指教,一定给分,再加100都可以
[email protected]
=======input.asp
<%Option Explicit
Dim Name , Station , Email , Context
Name = Request.Form("name")
Station = Request.Form("station")
Email = Request.Form("email")
Context = Request.Form("context")
%>
<html>
<head>
<title>标志征集启事</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<link rel="stylesheet" href="style.css" type="text/css">
</head><body bgcolor="#F7E7C7" text="#000000">
<table width="448" border="0" cellspacing="0" cellpadding="0" align="center">
<tr>
<td width="519" height="23" align="center"><img src="title1.jpg" width="500" height="40"></td>
</tr>
<tr>
<td width="519" height="22" valign="top">
<hr>
</td>
</tr>
<tr>
<td width="519" height="22">
<hr>
</td>
</tr>
<tr>
<td width="519" align="center" valign="middle">
<form name="input" method="post" action="updata.asp" enctype="multipart/form-data">
<table width="90%" border="0" cellspacing="0" cellpadding="4">
<tr>
<td width="21%" height="20" align="right">姓 名:</td>
<td width="79%" height="20">
<input class=border type="text" name="name" size="10" value="<%=Name%>">
</td>
</tr>
<tr>
<td width="21%" height="20" align="right">详细地址:</td>
<td width="79%" height="20">
<input class=border type="text" name="station" size="30" value="<%=Station%>">
</td>
</tr>
<tr>
<td width="21%" height="20" align="right">电子邮件:</td>
<td width="79%" height="20">
<input class=border type="text" name="email" value="<%=Email%>">
</td>
</tr>
<tr>
<td width="21%" height="20" align="right">标志图片:</td>
<td width="79%" height="20">
<input class=border type="file" name="image">
</td>
</tr>
<tr>
<td width="21%" height="20" align="right">说 明:</td>
<td width="79%" height="20">
<textarea class="border" name="context" cols="50" rows="5"><%=Context%></textarea>
</td>
</tr>
<tr align="center">
<td colspan="2" height="20">
<input style="BORDER-RIGHT: rgb(0,0,0) 1px solid; BORDER-TOP: rgb(0,0,0) 1px solid; BORDER-LEFT: rgb(0,0,0) 1px solid; COLOR: #ffffff; BORDER-BOTTOM: rgb(0,0,0) 1px solid; BACKGROUND-COLOR: #0099cc" type="submit" name="Submit" value="确定">
<input style="BORDER-RIGHT: rgb(0,0,0) 1px solid; BORDER-TOP: rgb(0,0,0) 1px solid; BORDER-LEFT: rgb(0,0,0) 1px solid; COLOR: #ffffff; BORDER-BOTTOM: rgb(0,0,0) 1px solid; BACKGROUND-COLOR: #0099cc" type="reset" name="Submit2" value="取消">
<a href="list.asp">我还是先看看别人的投稿</a> </td>
</tr>
</table>
</form>
</td>
</tr>
<tr>
<td width="519" height="22" valign="top">
<hr>
</td>
</tr>
</table>
</body>
</html>
========================updata.asp
<%Option Explicit%>
<!--#include file ="upload.asp"-->
<%
Dim FormSize , FormData , Fields , ImgSize , ImgType , ImgData , SQL , Name , Email , Station , Context , MessTextFormSize = Request.TotalBytes
FormData = Request.BinaryRead(FormSize)
Set Fields = GetUpload(FormData)Name = RemoveHtmlStyle(Fields("name").Value)
Email = RemoveHtmlStyle(Fields("email").Value)
Station = RemoveHtmlStyle(Fields("station").Value)
Context = RemoveHtmlStyle(Fields("context").Value)Response.Write "<form name='webaddform' method='post' action='input.asp'>"
Response.Write " <Input type=hidden Name=name value=" & Fields("name").Value & ">"
Response.Write " <Input type=hidden Name=email value=" & Fields("email").Value & ">"
Response.Write " <Input type=hidden Name=station value=" & Fields("station").Value & ">"
Response.Write " <Input type=hidden Name=context value=" & Fields("context").Value & ">"
Response.Write "</form>"MessText = CheckWebAddInput(name,email,station,context)
If MessText <> "" Then
Response.Write "<script>window.alert('" & MessText & "');document.webaddform.submit();</script>"
Response.End
End IfSQL = "Select * From LongMan Where ID Is Null"
Rs.Open SQL,Connect,1,3
Rs.AddNew
ImgSize = Fields("image").length
ImgType = Fields("image").ContentType
ImgData = Fields("image").ValueIf ImgType <> "image/pjpeg" And ImgType <> "image/gif" Then
MessText = "您要投稿的图片呢?"
Response.Write "<script>window.alert('" & MessText & "');document.webaddform.submit();</script>"
Else
Rs("Image").AppendChunk ImgData
Rs("ImageSize") = ImgSize
End IfRs("Name") = Name
Rs("Email") = Email
Rs("Context") = Context
Rs("Station") = Station
Rs.Update
Rs.CloseResponse.Write "<script>window.alert('投稿成功!您的投稿在审核后将发布,请等待好消息!');document.webaddform.submit();</script>"
%>========upload.asp
<SCRIPT RUNAT=SERVER LANGUAGE=VBSCRIPT>
Function GetUpload(FormData)
Dim DataStart,DivStr,DivLen,DataSize,FormFieldData,PosOpenBoundary,PosCloseBoundary,FieldNameStart,FieldNameSize,FormFieldName
Dim FieldFileNameStart,FormFileName,FieldFileCTStart,FormFileCT,Field,FieldFileNameSize,FieldFileCTSize
'分隔标志串(+CRLF)
DivStr = LeftB(FormData,InStrB(FormData,str2bin(VbCrLf)) + 1)
'分隔标志串长度
DivLen = LenB(DivStr)
PosOpenBoundary = InStrB(FormData,DivStr)
PosCloseBoundary = InStrB(PosOpenBoundary + 1,FormData,DivStr)
Set Fields = CreateObject("Scripting.Dictionary") While PosOpenBoundary > 0 And PosCloseBoundary > 0
'name起始位置(name="xxxxx"),加6是因为[name="]长度为6
FieldNameStart = InStrB(PosOpenBoundary,FormData,str2bin("name=")) + 6
FieldNameSize = InStrB(FieldNameStart,FormData,ChrB(34)) - FieldNameStart '(")的ASC值=34
FormFieldName = bin2str(MidB(FormData,FieldNameStart,FieldNameSize)) 'filename起始位置(filename="xxxxx")
FieldFileNameStart = InStrB(PosOpenBoundary,FormData,str2bin("filename=")) + 10
If FieldFileNameStart < PosCloseBoundary And FieldFileNameStart > PosopenBoundary Then
FieldFileNameSize = InStrB(FieldFileNameStart,FormData,ChrB(34)) - FieldFileNameStart '(")的ASC值=34
FormFileName = bin2str(MidB(FormData,FieldFileNameStart,FieldFileNameSize))
Else
FormFileName = ""
End If 'Content-Type起始位置(Content-Type: xxxxx)
FieldFileCTStart = InStrB(PosOpenBoundary,FormData,str2bin("Content-Type:")) + 14
If FieldFileCTStart < PosCloseBoundary And FieldFileCTStart > PosOpenBoundary Then
FieldFileCTSize = InStrB(FieldFileCTStart,FormData,str2bin(VbCrLf & VbCrLf)) - FieldFileCTStart
FormFileCT = bin2str(MidB(FormData,FieldFileCTStart,FieldFileCTSize))
Else
FormFileCT = ""
End If '数据起始位置:2个CRLF开始
DataStart = InStrB(PosOpenBoundary,FormData,str2bin(VbCrLf & VbCrLf)) + 4
If FormFileName <> "" Then
'数据长度,减1是因为数据文件的存取字节数问题(可能是AppendChunk方法的问题):
'由于字节数为奇数的图象存到数据库时会去掉最后一个字符导致图象不能正确显示,
'字节数为偶数的数据文件就不会出现这个问题,因此必须保持字节数为偶数。
DataSize = InStrB(DataStart,FormData,DivStr) - DataStart - 1
FormFieldData = MidB(FormData,DataStart,DataSize)
Else
'数据长度,减2是因为分隔标志串前有一个CRLF
DataSize = InStrB(DataStart,FormData,DivStr) - DataStart - 2
FormFieldData = bin2str(MidB(FormData,DataStart,DataSize))
End If '建立一个Dictionary集存储Form中各个Field的相关数据
Set Field = CreateUploadField()
Field.Name = FormFieldName
Field.FilePath = FormFileName
Field.FileName = GetFileName(FormFileName)
Field.ContentType = FormFileCT
Field.Length = LenB(FormFieldData)
Field.Value = FormFieldData Fields.Add FormFieldName, Field PosOpenBoundary = PosCloseBoundary
PosCloseBoundary = InStrB(PosOpenBoundary + 1,FormData,DivStr)
Wend
Set GetUpload = Fields
End Function'把二进制字符串转换成普通字符串函数
Function bin2str(binstr)
Dim varlen,clow,ccc,skipflag,i
'中文字符Skip标志
skipflag=0
ccc = ""
If Not IsNull(binstr) Then
varlen=LenB(binstr)
For i=1 To varlen
If skipflag=0 Then
clow = MidB(binstr,i,1)
'判断是否中文的字符
If AscB(clow) > 127 Then
'AscW会把二进制的中文双字节字符高位和低位反转,所以要先把中文的高低位反转
ccc =ccc & Chr(AscW(MidB(binstr,i+1,1) & clow))
skipflag=1
Else
ccc = ccc & Chr(AscB(clow))
End If
Else
skipflag=0
End If
Next
End If
bin2str = ccc
End Function
'把普通字符串转成二进制字符串函数
Function str2bin(varstr)
Dim I,varchar,varasc,varlow,varhigh
str2bin=""
For i=1 To Len(varstr)
varchar=mid(varstr,i,1)
varasc = Asc(varchar)
' asc对中文字符求出来的值可能为负数,
' 加上65536就可求出它的无符号数值
' -1在机器内是用补码表示的0xffff,
' 其无符号值为65535,65535=-1+65536
' 其他负数依次类推。
If varasc<0 Then
varasc = varasc + 65535
End If
'对中文的处理:把双字节低位和高位分开
If varasc>255 Then
varlow = Left(Hex(Asc(varchar)),2)
varhigh = right(Hex(Asc(varchar)),2)
str2bin = str2bin & chrB("&H" & varlow) & chrB("&H" & varhigh)
Else
str2bin = str2bin & chrB(AscB(varchar))
End If
Next
End Function'取得文件名(去掉Path)
Function GetFileName(FullPath)
If FullPath <> "" Then
FullPath = StrReverse(FullPath)
FullPath = Left(FullPath, InStr(1, FullPath, "\") - 1)
GetFileName = StrReverse(FullPath)
Else
GetFileName = ""
End If
End Function
</SCRIPT>
<SCRIPT RUNAT=SERVER LANGUAGE=JSCRIPT>
function CreateUploadField(){ return new uf_Init() }
function uf_Init(){
this.Name = null
this.FileName = null
this.FilePath = null
this.ContentType = null
this.Value = null
this.Length = null
}
</SCRIPT>