枫林在线论坛精华区>>程序设计 |
[35228] 主题: 无组件上传图片到数据库中,最完整解决方案 |
作者: leaflet (Leaf闭关中…) | ||
标题: 无组件上传图片到数据库中,最完整解决方案[转载] | ||
来自: 61.165.*.* | ||
发贴时间: 2003年01月06日 18:13:33 | ||
长度: 12320字 | ||
up.htm
<!--#include file="inc/domin.asp"--> <!--#include file="conn.asp"--> <html> <head> <title><% =webname %></title> <meta http-equiv="Content-Type" content="text/ html; charset=gb2312"> <link rel="stylesheet" href="main.css" ty pe="text/css"> <style type="text/css"> <!-- .tx1 { height: 20px; width: 30px; font-size: 9pt; border: 1px so lid; border-color: black black #000000; color: #0000FF} --> </style> <script language="JavaScript"> <!-- var bgc_on=new Array("#74D738","#FF9C17",&qu ot;#3278AB","#486177","#078C00","# 007ECA") var bgc_off=new Array("#4CAD12","FFB859",&qu ot;5F9FD0","577590","08A700","009F FF") function turnon(obj1,id){ obj1.style.background=bgc_on; } function turnoff(obj1,id){ obj1.style.background=bgc_off; } //--> </script> <SCRIPT language=javascript> function check_input() { if (Frm.pic.value=="") { alert("请选择要上传的图片"); return false; } if (Frm.type.value=="") { alert("请选择图片类型"); return false; } if (Frm.thetext.value=="") { alert("请输入照片说明"); return false; } return true; } </SCRIPT> </head> <body bgcolor="#555555" text="#000000" le ftmargin="0" topmargin="0"> <table width=755 cellpadding=0 cellspacing=0 border=0 bgcolor =#ffffff align="center"> <tr> <td height=100><img src="img/top.gif" align=& quot;top"> </table> <!--#include file="inc/mulu.asp"--> <table width=755 cellpadding=0 cellspacing=0 border=0 bgcolor =#ffffff align="center" bordercolor=#000000> <tr> <td height=400 width=180 bgcolor=#D1E9D5 style="border-r ight: 1px #0E801E solid"> <table width=100% height=100% cellpadding=0 cellspacing=0 bor der=0 align="center" bordercolor=#000000> <tr><td height=30 align="center" class=L15> ;<font color=#E96D08>欢迎你:<% =username %> 管理中心 </font> <tr><td height=23 align="center" class=L15 bg color=#4CAD12 style="border-top:0px #0E801E solid; border-b ottom:1px #0E801E solid;"><font color=#C2F009 class=y inying>管 理 中 心</font> <tr><td height=20 class=L13> <!--#include file="inc/centermulu.asp"--> <tr><td height=5> <tr><td> </table> <td> <% set rs=server.createobject("adodb.recordset") sql="select * from photo where author='"&username& amp;"'" rs.open sql,conn,1,1 %> <table cellpadding=0 cellspacing=0 border=0 width=100% height =100%> <tr><td height=3> <tr><td height=3 bgcolor=#ffffff background=img/bj3.gif > <tr><td height=20 valign="bottom" bgcolor=#ee eeee> 现在位置: 98243班 - 管理中心 - 添加新闻 <tr><td height=3 bgcolor=#eeeeee style="border-bot tom: 1px #cccccc solid"><p style="font-size:1pt& quot;> <tr><td height=20 valign="bottom"> <fon t color=green><% =username %>:你一共上传了 <font co lor=red><% =rs.recordcount %></font> 张照片</f ont> <a href="adminphoto.asp"><font color= red><u>管理以前上传的照片</u></font></a& gt; <tr><td bgcolor=#ffffff valign=top> <table cellpadding=0 cellspacing=0 border=0 width=95% height= 100% align="center"> <form action=addphoto.asp method=post name=Frm onSubmit=" ;return check_input()" enctype="multipart/form-data&qu ot;> <tr><td height=20 colspan=2> <tr><td height=25 width=15% align="right" cla ss=L13>选择照片: <td> <input NAME="pic" T YPE="FILE" class="tx1" style="width:300 "> <font color=red>拒绝色情、写真图等</font> <tr><td height=25 width=20% align="right" cla ss=L13>照片分类: <td> <select name="type" > <option selected value="">选择类型</option> ; <option value="班级合影">班级合影</option> <option value="个人照片">个人照片</option> <option value="恩师照片">恩师照片</option> <option value="情人照片">情人照片</option> <option value="友人照片">友人照片</option> <option value="其他照片">其他照片</option> </select> <tr><td height=25 width=20% align="right" cla ss=L13>照片说明: <td> <textarea name="thetext& quot; cols="46" rows="7" style="border: 1px double rgb(88,88,88);font:9pt"> </textarea> <font color=red>最多20个字符</font> ; <tr><td height=5 colspan=2> <tr><td height=25 colspan=2 align="center"> ; <input type="submit" name="Submit" value= " 提 交 " style="border:1px double rgb(88,88,88); font:9pt"> <input type="reset" name="Reset" val ue=" 重 写 " style="border:1px double rgb(88,88,8 8);font:9pt"> <tr><td colspan=2> </tr></form> </table> </table> </table> <!--#include file="inc/footer.asp"--> </body> </html> fupload.inc <SCRIPT RUNAT=SERVER LANGUAGE=VBSCRIPT> '限制上传图片大小 Dim UploadSizeLimit '********************************** 得到上传数据 *************** ******************* Function GetUpload() Dim Result Set Result = Nothing If Request.ServerVariables("REQUEST_METHOD") = "P OST" Then 'Request method must be "POST" Dim CT, PosB, Boundary, Length, PosE CT = Request.ServerVariables("HTTP_Content_Type") 'rea ds Content-Type header If LCase(Left(CT, 19)) = "multipart/form-data" Then 'C ontent-Type header must be "multipart/form-data" 'This is upload request. 'Get the boundary and length from Content-Type header PosB = InStr(LCase(CT), "boundary=") 'Finds boundary If PosB > 0 Then Boundary = Mid(CT, PosB + 9) 'Separetes boun dary Length = CLng(Request.ServerVariables("HTTP_Content_Length& quot;)) 'Get Content-Length header if "" & UploadSizeLimit<>"" then UploadSizeLimit = clng(UploadSizeLimit) if Length > UploadSizeLimit then ' on error resume next 'Clears the input buffer ' response.AddHeader "Connection", "Close" ' on error goto 0 Request.BinaryRead(Length) Err.Raise 2, "GetUpload", "Upload size " &am p; FormatNumber(Length,0) & "B exceeds limit of " & FormatNumber(UploadSizeLimit,0) & "B" exit function end if end if If Length > 0 And Boundary <> "" Then 'Are th ere required informations about upload ? Boundary = "--" & Boundary Dim Head, Binary Binary = Request.BinaryRead(Length) 'Reads binary data from clie nt 'Retrieves the upload fields from binary data Set Result = SeparateFields(Binary, Boundary) Binary = Empty 'Clear variables Else Err.Raise 10, "GetUpload", "Zero length request . " End If Else Err.Raise 11, "GetUpload", "No file sent." End If Else Err.Raise 1, "GetUpload", "Bad request method.&qu ot; End If Set GetUpload = Result End Function Function SeparateFields(Binary, Boundary) Dim PosOpenBoundary, PosCloseBoundary, PosEndOfHeader, isLastBou ndary Dim Fields Boundary = StringToBinary(Boundary) PosOpenBoundary = InstrB(Binary, Boundary) PosCloseBoundary = InstrB(PosOpenBoundary + LenB(Boundary), Bina ry, Boundary, 0) Set Fields = CreateObject("Scripting.Dictionary") Do While (PosOpenBoundary > 0 And PosCloseBoundary > 0 And Not isLastBoundary) 'Header and file/source field data Dim HeaderContent, FieldContent 'Header fields Dim Content_Disposition, FormFieldName, SourceFileName, Content_ Type 'Helping variables Dim Field, TwoCharsAfterEndBoundary 'Get end of header PosEndOfHeader = InstrB(PosOpenBoundary + Len(Boundary), Binary, StringToBinary(vbCrLf + vbCrLf)) 'Separates field header HeaderContent = MidB(Binary, PosOpenBoundary + LenB(Boundary) + 2, PosEndOfHeader - PosOpenBoundary - LenB(Boundary) - 2) 'Separates field content FieldContent = MidB(Binary, (PosEndOfHeader + 4), PosCloseBounda ry - (PosEndOfHeader + 4) - 2) 'Separates header fields from header GetHeadFields BinaryToString(HeaderContent), Content_Disposition , FormFieldName, SourceFileName, Content_Type 'Create one field and assign parameters Set Field = CreateUploadField() Field.Name = FormFieldName Field.ContentDisposition = Content_Disposition Field.FilePath = SourceFileName Field.FileName = GetFileName(SourceFileName) Field.ContentType = Content_Type Field.Value = FieldContent Field.Length = LenB(FieldContent) Fields.Add FormFieldName, Field 'Is this ending boundary ? TwoCharsAfterEndBoundary = BinaryToString(MidB(Binary, PosCloseB oundary + LenB(Boundary), 2)) 'Binary.Mid(PosCloseBoundary + Len(Boundary), 2).String isLastBoundary = TwoCharsAfterEndBoundary = "--" If Not isLastBoundary Then 'This is not ending boundary - go to next form field. PosOpenBoundary = PosCloseBoundary PosCloseBoundary = InStrB(PosOpenBoundary + LenB(Boundary), Bina ry, Boundary ) End If Loop Set SeparateFields = Fields End Function '********************************** Utilities ****************** **************** Function BinaryToString(str) strto = "" for i=1 to lenb(str) if AscB(MidB(str, i, 1)) > 127 then strto = strto & chr(Ascb(MidB(str, i, 1))*256+Ascb(MidB(str, i+1, 1))) i = i + 1 else strto = strto & Chr(AscB(MidB(str, i, 1))) end if next BinaryToString=strto End Function Function StringToBinary(String) Dim I, B For I=1 to len(String) B = B & ChrB(Asc(Mid(String,I,1))) Next StringToBinary = B End Function 'Separates header fields from upload header Function GetHeadFields(ByVal Head, Content_Disposition, Name, Fi leName, Content_Type) Content_Disposition = LTrim(SeparateField(Head, "content-di sposition:", ";")) Name = (SeparateField(Head, "name=", ";")) ' ltrim If Left(Name, 1) = """" Then Name = Mid(Name , 2, Len(Name) - 2) FileName = (SeparateField(Head, "filename=", ";&q uot;)) 'ltrim If Left(FileName, 1) = """" Then FileName = Mid(FileName, 2, Len(FileName) - 2) Content_Type = LTrim(SeparateField(Head, "content-type:&quo t;, ";")) End Function 'Separets one filed between sStart and sEnd Function SeparateField(From, ByVal sStart, ByVal sEnd) Dim PosB, PosE, sFrom sFrom = LCase(From) PosB = InStr(sFrom, sStart) If PosB > 0 Then PosB = PosB + Len(sStart) PosE = InStr(PosB, sFrom, sEnd) If PosE = 0 Then PosE = InStr(PosB, sFrom, vbCrLf) If PosE = 0 Then PosE = Len(sFrom) + 1 SeparateField = Mid(From, PosB, PosE - PosB) Else SeparateField = Empty End If End Function 'Separetes file name from the full path of file Function GetFileName(FullPath) Dim Pos, PosF PosF = 0 For Pos = Len(FullPath) To 1 Step -1 Select Case Mid(FullPath, Pos, 1) Case "/", "\": PosF = Pos + 1: Pos = 0 End Select Next If PosF = 0 Then PosF = 1 GetFileName = Mid(FullPath, PosF) End Function </SCRIPT> <SCRIPT RUNAT=SERVER LANGUAGE=JSCRIPT> //The function creates Field object. function CreateUploadField(){ return new uf_Init() } function uf_Init(){ this.Name = null this.ContentDisposition = null this.FileName = null this.FilePath = null this.ContentType = null this.Value = null this.Length = null } </SCRIPT> addphoto.asp <!--#include file="conn.asp"--> <!--#include file="inc/domin.asp"--> <!--#include file="fupload.inc"--> <% if Request.ServerVariables("REQUEST_METHOD") = "P OST" Then Dim Fields UploadSizeLimit=100000 Set Fields = GetUpload() dim Field For Each Field In Fields.Items select case Field.name case "thetext" sss=BinaryToString(Field.value) case "type" fff=BinaryToString(Field.value) case "submit" submit=BinaryToString(Field.value) case "pic" filename=field.FileName fileContentType=field.ContentType filevalue=field.value end select next '--------------- if filename<>"" and fileContentType<>" ;image/gif" and fileContentType<>"image/pjpeg" then %> <center> <br><br> <font color=red size=3>上传的照片应该为GIF或JPG文件!</ font><br><br> <input type="button" value="重填" onclick ="history.go( -1 );return true;"> </center> <% else '------------ '开始输入 '----------- response.write sss response.write"<br>" response.write fff set rs=server.createobject("ADODB.recordset") sql = "select * from tb where theid is null" rs.Open sql,conn,3,3 rs.addnew rs("author")=username rs("thetext")=sss rs("types")=fff rs("hits")=1 rs("posttime")=now() rs("photo").appendchunk filevalue rs.update rs.close %> <br><br> <center><font color=red size=3>成功输入个人基本档案!</font><br><br> ;<form method="post" action="personinf.asp"><input type="submit& quot; value="返回"></form> </center> <% end if end if %> showpic.asp <!--#include file="conn.asp"--> <% id=Request("id") set rs=server.CreateObject("adodb.recordset") sql="SELECT * FROM tb where theid="&id rs.Open sql,conn,1,3 response.contenttype="image/gif" Response.BinaryWrite rs("photo") %> |
||
========== * * * * * ==========
|
返回 |