|
![]() |
名片设计 CorelDRAW Illustrator AuotoCAD Painter 其他软件 Photoshop Fireworks Flash |
|
upload.inc <!---------------------> <SCRIPT RUNAT=SERVER LANGUAGE=VBSCRIPT> Function GetUpload(FormData) Dim DataStart,DivStr,DivLen,DataSize,FormFieldData \\\'\\\'分隔标志串(+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 \\\'\\\'中文字符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) 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> <!----------------------------------------------------> 在提交的叶面使用 <form method="POST" enctype="multipart/form-data"> 保存的叶面 将upload.inc包含 <!--#include file="upload.inc"--> <% function lngConvert2(strTemp) str1=leftb(strTemp,1) str2=rightb(strTemp,1) lngConvert2 = clng(ascb(str2) + ((ascb(str1) * 256))) end function function lngConvert(strTemp) str1=leftb(strTemp,1) str2=rightb(strTemp,1) len1=ascb(str1) len2=ascb(str2) lngConvert = clng(ascb(str1) + ascb(str2) * 256) end function Dim FormData,FormSize FormSize=Request.TotalBytes FormData=Request.BinaryRead(FormSize) Set Fields = GetUpload(FormData) If Fields("newfile").FileName<>"" Then tempstr=Leftb(Fields("newfile").Value,10) tstr=chrb(255)&chrb(216)&chrb(255)&chrb(224)&chrb(0)&chrb(16)&chrb(74)&chrb(70)&chrb(73)&chrb(70) end if \\\'提交页面的表单内容 txt1=Fields("txt1").Value txt2=Fields("txt2").Value txt3=Fields("txt3").Value Set rs = Server.CreateObject("ADODB.Recordset") sql="select * from news" rs.open sql,conn,1,3 \\\'插入纪录 rs.addnew rs("title")=title rs("body")=content rs("pub")=from rs("up_date")=now() set field=rs.fields("pic") field.appendchunk Fields("newfile").Value \\\'多个图片相同处理 Rs.Update rs.close conn.close set rs=nothing set conn=nothing %> 返回类别: 教程 上一教程: 自己动手,结合JAVASCRIPT和DHTML做一个UBB编辑器 下一教程: 用ASP怎样编写文档搜索页面(3) 您可以阅读与"多个表单和多个图片一起上传完美解决方案"相关的教程: · 无组件上传图片到数据库中,最完整解决方案 · 无组件上传文字与图片至数据库之GZTIGER解决方案 · 跨服务器上传文件完美解决 · ASP跨服务器上传文件完美解决 · ASP无组件上传进度条解决方案 |
![]() ![]() |
快精灵印艺坊 版权所有 |
首页![]() ![]() ![]() ![]() ![]() ![]() ![]() |