摘要:最近写一个微信的项目要使用到无组件上传,以下这段是详细的无组件上传接收代码......
代码:<% SavePath = "upload" '保存路径 filesize = Request.TotalBytes 'filesize是上传文件的大小 filedata = Request.BinaryRead(filesize) 'filedata是上传文件的二进制数据 newline=chrB(13)&chrB(10) 'newline表示二进制的回车符 delimiter=leftB(filedata,clng(instrb(filedata,newline))-1) 'delimiter是分隔符 n1=clng(instrb(filedata,newline))+2 '获取第二部分的开始位置n1 n2=clng(instrb(n1,filedata,newline)) '获取第二部分中上传文件名行的结束位置n2,即第二个回车符的第一个字符 filenames=BtoS(midB(filedata,n1,n2-n1)) '获取第二部分中上传文件名行的文本内容 'response.write "n1:"&n1&"n2:"&n2&"."&filenames n3=instrrev(filenames,"\") '获取上传文件名的开始位置 filename=mid(filenames,n3+1,len(filenames)-n3-1) '获取上传文件名(不含路径) 'response.write filename
'下面开始取得文件内容开始的位置,第四个回车符后的第一个字符 beginpos=clng(instrb(n2+1,filedata,newline)) '获取第三个回车符的第一个字符位置 beginpos=clng(instrb(beginpos+1,filedata,newline))+1 '获取文件内容第一个字符之前的位置 '取得文件内容结束的位置,第二个分隔符"delimiter"开始的前一个二进制字符 endpos=clng(instrb(lenb(delimiter),filedata,delimiter))-3 '获取文件内容中最后一个字符的位置
set str_c=server.CreateObject("ADODB.Stream") '创建一个ADODB.Stream对象,str_c为源数据流 str_c.Mode=3 '设置打开模式,3为可读可写 str_c.Type=1 '设置数据类型,1为二进制数据 str_c.Open '打开对象 set desc=server.CreateObject("ADODB.Stream") '创建一个ADODB.Stream对象,desc为目标数据流 desc.Mode=3 Desc.Type=1 desc.Open SaveFile = Server.MapPath(SavePath& "\" & filename) '获取保存文件路径及文件名 str_c.Write filedata '将指定的二进制数据流装入对像str_c中 str_c.position=beginpos 'position指出文件的开始位置 str_c.copyto desc,endpos-beginpos 'endpos-beginpos是文件的长度 desc.SaveToFile SaveFile,2 '以SaveFile指定的路径及名称保存文件 '完成后,应关闭并释放STEAM对象 Desc.Close Set desc=nothing str_c.Close Set str_c=nothing Response.write "文件上传成功"
'将二进制转换成文本 Function BtoS (bstr) If not IsNull(bstr) Then for i = 0 to lenb(bstr) - 1 bchr = midb(bstr,i+1,1) If ascb(bchr)>127 Then temp = temp&chr(ascw(midb(bstr, i+2, 1)&bchr)) i = i+1 Else temp = temp&chr(ascb(bchr)) End If next End If BtoS = temp End Function
%> |
|