关于文件上传组件的调试问题

发表于:2007-06-30来源:作者:点击数: 标签:
这是我的上传组件原文, vb 作的,没有任何问题!br br nbsp;nbsp;nbsp;Public Binbr Private Names()br Private Sizes()br Private Filenames()br Private Myposition()br Public Maxsizebr Public Fcountbr br Public Sub Exec()br nbsp;nbsp;nbsp;Dim Psta
这是我的上传组件原文,vb作的,没有任何问题!<br>
<br>
&nbsp;&nbsp;&nbsp;Public Bin<br>
Private Names()<br>
Private Sizes()<br>
Private Filenames()<br>
Private Myposition()<br>
Public Maxsize<br>
Public Fcount<br>
<br>
Public Sub Exec()<br>
&nbsp;&nbsp;&nbsp;Dim Pstart, Pend, strBoundary, i, Str, Position<br>
&nbsp;&nbsp;&nbsp;Dim Spacestr<br>
&nbsp;&nbsp;&nbsp;Spacestr = &quot;-----------------------------&quot;<br>
&nbsp;&nbsp;&nbsp;Dim tempbarray, tempstr<br>
&nbsp;&nbsp;&nbsp;tempstr = BtoS(Bin)<br>
&nbsp;&nbsp;&nbsp;strBoundary = &quot;Content-Disposition: form-data&quot;<br>
&nbsp;&nbsp;&nbsp;tempbarray = Split(tempstr, strBoundary)<br>
&nbsp;&nbsp;&nbsp;Fcount = UBound(tempbarray)<br>
&nbsp;&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;ReDim Names(Fcount)<br>
&nbsp;&nbsp;&nbsp;ReDim Sizes(Fcount)<br>
&nbsp;&nbsp;&nbsp;ReDim Filenames(Fcount)<br>
&nbsp;&nbsp;&nbsp;ReDim Myposition(Fcount, 2)<br>
&nbsp;&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;strBoundary = StoB(strBoundary)<br>
&nbsp;&nbsp;&nbsp;Position = InStrB(Bin, strBoundary) + 1<br>
&nbsp;&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;For i = 0 To Fcount - 1<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Pstart = InStrB(Position, Bin, StoB(Chr(34))) + 1<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Pend = InStrB(Pstart, Bin, StoB(Chr(34)))<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Names(i) = BtoS(MidB(Bin, Pstart, Pend - Pstart))<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;‘’以上取表单名<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Pstart = Pend + 1<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Str = MidB(Bin, Pstart, 15)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Position = InStrB(Str, StoB(&quot;filename&quot;))<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If Position &gt; 0 Then<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Pstart = InStrB(Pstart, Bin, StoB(Chr(34))) + 1<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Pend = InStrB(Pstart, Bin, StoB(Chr(34)))<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Str = BtoS(MidB(Bin, Pstart, Pend - Pstart))<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If Str = Empty Then<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Filenames(i) = &quot;&quot;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Else<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Filenames(i) = Str<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Pstart = InStrB(Pend, Bin, StoB(vbCrLf & vbCrLf)) + 4<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Pend = InStrB(Pstart, Bin, StoB(&quot;-------&quot;)) - 2<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Myposition(i, 0) = Pstart<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Myposition(i, 1) = Pend<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;End If<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Else<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Pstart = InStrB(Pstart, Bin, StoB(vbCrLf & vbCrLf)) + 4<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Pend = InStrB(Pstart, Bin, StoB(&quot;-------&quot;)) - 2<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Myposition(i, 0) = Pstart<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Myposition(i, 1) = Pend<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;End If<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Position = Pend<br>
&nbsp;&nbsp;&nbsp;Next<br>
<br>
&nbsp;&nbsp;&nbsp;‘’Dim save<br>
&nbsp;&nbsp;&nbsp;‘’save = savetofile()<br>
&nbsp;&nbsp;&nbsp;‘’response.write save & &quot;&lt;br&gt;&quot;<br>
End Sub<br>
Public Function SaveFile(fieldname, mypath, newname)<br>
&nbsp;&nbsp;Dim i, tempname, temptype, p, temppath<br>
&nbsp;&nbsp;Dim binarystr() As Byte<br>
&nbsp;&nbsp;For i = 0 To Fcount - 1<br>
&nbsp;&nbsp;&nbsp;&nbsp;If fieldname = Names(i) Then<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tempname = Filenames(i)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p = i<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Exit For<br>
&nbsp;&nbsp;&nbsp;&nbsp;End If<br>
&nbsp;&nbsp;Next<br>
&nbsp;&nbsp;i = p<br>
&nbsp;&nbsp;If tempname &lt;&gt; Empty Then<br>
&nbsp;&nbsp;&nbsp;&nbsp;If Filenames(i) &lt;&gt; &quot;&quot; Then<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p = InStrRev(tempname, &quot;.&quot;)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temptype = Right(tempname, Len(tempname) - p)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temppath = mypath & &quot;\&quot; & newname & &quot;.&quot; & temptype<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;binarystr = MidB(Bin, Myposition(i, 0), Myposition(i, 1) - Myposition(i, 0))<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Open temppath For Binary As #1<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Put #1, , binarystr<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Close #1<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SaveFile = newname & &quot;.&quot; & temptype<br>
&nbsp;&nbsp;&nbsp;&nbsp;Else<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SaveFile = &quot;0&quot;<br>
&nbsp;&nbsp;&nbsp;&nbsp;End If<br>
&nbsp;&nbsp;Else<br>
&nbsp;&nbsp;&nbsp;&nbsp;SaveFile = &quot;0&quot;<br>
&nbsp;&nbsp;End If<br>
End Function<br>
Public Function getform(fieldname)<br>
&nbsp;&nbsp;&nbsp;Dim i, sign, p<br>
&nbsp;&nbsp;&nbsp;For i = 0 To Fcount - 1<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If fieldname = Names(i) Then<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;‘’getform = BtoS(MidB(values(i), 1, LenB(values(i))))<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sign = 1<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p = i<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Exit For<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;End If<br>
&nbsp;&nbsp;&nbsp;Next<br>
&nbsp;&nbsp;&nbsp;If sign = 1 Then<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;getform = BtoS(MidB(Bin, Myposition(p, 0), Myposition(p, 1) - Myposition(p, 0)))<br>
&nbsp;&nbsp;&nbsp;Else<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;getform = &quot;&quot;<br>
&nbsp;&nbsp;&nbsp;End If<br>
End Function<br>
Public Function getsize(fieldname)<br>
&nbsp;&nbsp;Dim i, sign, p<br>
&nbsp;&nbsp;For i = 0 To Fcount - 1<br>
&nbsp;&nbsp;&nbsp;&nbsp;If fieldname = Names(i) Then<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sign = 1<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p = i<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Exit For<br>
&nbsp;&nbsp;&nbsp;&nbsp;End If<br>
&nbsp;&nbsp;Next<br>
&nbsp;&nbsp;If sign = 1 Then<br>
&nbsp;&nbsp;&nbsp;&nbsp;getsize = Myposition(p, 1) - Myposition(p, 0)<br>
&nbsp;&nbsp;Else<br>
&nbsp;&nbsp;&nbsp;&nbsp;getsize = 0<br>
&nbsp;&nbsp;End If<br>
End Function<br>
Private Function BtoS(binstr)<br>
&nbsp;&nbsp;&nbsp;Dim lnglen<br>
&nbsp;&nbsp;&nbsp;Dim tmpBin<br>
&nbsp;&nbsp;&nbsp;Dim strC<br>
&nbsp;&nbsp;&nbsp;Dim skipflag<br>
&nbsp;&nbsp;&nbsp;Dim i<br>
&nbsp;&nbsp;&nbsp;‘’中文字符Skip标志<br>
&nbsp;&nbsp;&nbsp;skipflag = 0<br>
&nbsp;&nbsp;&nbsp;strC = &quot;&quot;<br>
&nbsp;&nbsp;&nbsp;If Not IsNull(binstr) Then<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lnglen = LenB(binstr)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;For i = 1 To lnglen<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If skipflag = 0 Then<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmpBin = MidB(binstr, i, 1)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;‘’判断是否中文的字符<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If AscB(tmpBin) &gt; 127 Then<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;‘’AscW会把二进制的中文双字节字符高位和低位反转,所以要先把中文的高低位反转<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strC = strC & Chr(AscW(MidB(binstr, i + 1, 1) & tmpBin))<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;skipflag = 1<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Else<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strC = strC & Chr(AscB(tmpBin))<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;End If<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Else<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;skipflag = 0<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;End If<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Next<br>
&nbsp;&nbsp;&nbsp;End If<br>
&nbsp;&nbsp;BtoS = strC<br>
End Function<br>
<br>
<br>
‘’把普通字符串转成二进制字符串函数<br>
Private Function StoB(varstr)<br>
&nbsp;&nbsp;&nbsp;Dim str2bin<br>
&nbsp;&nbsp;&nbsp;Dim varchar<br>
&nbsp;&nbsp;&nbsp;Dim varasc<br>
&nbsp;&nbsp;&nbsp;Dim varlow, varhigh<br>
&nbsp;&nbsp;&nbsp;Dim i<br>
&nbsp;&nbsp;&nbsp;str2bin = &quot;&quot;<br>
&nbsp;&nbsp;&nbsp;For i = 1 To Len(varstr)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;varchar = Mid(varstr, i, 1)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;varasc = Asc(varchar)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;‘’ asc对中文字符求出来的值可能为负数,<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;‘’ 加上65536就可求出它的无符号数值<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;‘’ -1在机器内是用补码表示的0xffff,<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;‘’ 其无符号值为65535,65535=-1+65536<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;‘’ 其他负数依次类推。<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If varasc &lt; 0 Then<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;varasc = varasc + 65535<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;End If<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;‘’对中文的处理:把双字节低位和高位分开<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If varasc &gt; 255 Then<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;varlow = Left(Hex(Asc(varchar)), 2)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;varhigh = Right(Hex(Asc(varchar)), 2)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;str2bin = str2bin & ChrB(&quot;&H&quot; & varlow) & ChrB(&quot;&H&quot; & varhigh)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Else<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;str2bin = str2bin & ChrB(AscB(varchar))<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;End If<br>
&nbsp;&nbsp;&nbsp;Next<br>
&nbsp;&nbsp;&nbsp;StoB = str2bin<br>
End Function<br>
<br>
<br>
Private Sub Class_Terminate()<br>
Set Bin = Nothing<br>
End Sub<br>
<br>
<br>
<br>
<br>
<br>
<br>

原文转自:http://www.ltesting.net