解决稻香老农无组件上传类在文件上传时当文件名中含中文单双引号取不到正确的文件名的方案

来源:互联网 发布:linux 分区表 编辑:程序博客网 时间:2024/04/30 12:17

今天完成了对稻香老农的最新版本无组件上传类V2.1的修改。

解决了文件上传时当文件名中含中文单双引号取不到正确的文件名的问题。

参考了无惧上传类,在此感谢稻香老农和梁无惧两位老师,谢谢他们无偿的奉献了自己的源码。

下面附上修改后的代码:

 

<SCRIPT RUNAT=SERVER LANGUAGE=VBSCRIPT>dim Data_5xsoftClass upload_5xsoft  dim objForm,objFile,VersionPublic function Form(strForm)   strForm=lcase(strForm)   if not objForm.exists(strForm) then     Form=""   else     Form=objForm(strForm)   end if end functionPublic function File(strFile)   strFile=lcase(strFile)   if not objFile.exists(strFile) then     set File=new FileInfo   else     set File=objFile(strFile)   end if end functionPrivate Sub Class_Initialize   dim RequestData,sStart,bCrlf,sInfo,iInfoStart,iInfoEnd,tStream,iStart,theFile  dim iFileSize,sFilePath,sFileType,sFormValue,sFileName  dim iFindStart,iFindEnd  dim iFormStart,iFormEnd,sFormName  Version="化境HTTP上传程序 Version 2.1"  set objForm=Server.CreateObject("Scripting.Dictionary")  set objFile=Server.CreateObject("Scripting.Dictionary")  if Request.TotalBytes<1 then Exit Sub  set tStream = Server.CreateObject("adodb.stream")  set Data_5xsoft = Server.CreateObject("adodb.stream")  Data_5xsoft.Type = 1  Data_5xsoft.Mode =3  Data_5xsoft.Open  Data_5xsoft.Write  Request.BinaryRead(Request.TotalBytes)  Data_5xsoft.Position=0  RequestData =Data_5xsoft.Read   iFormStart = 1  iFormEnd = LenB(RequestData)  bCrlf = chrB(13) & chrB(10)  sStart = MidB(RequestData,1, InStrB(iFormStart,RequestData,bCrlf)-1)  iStart = LenB (sStart)  iFormStart=iFormStart+iStart+1  while (iFormStart + 10) < iFormEnd iInfoEnd = InStrB(iFormStart,RequestData,bCrlf & bCrlf)+3tStream.Type = 1tStream.Mode =3tStream.OpenData_5xsoft.Position = iFormStartData_5xsoft.CopyTo tStream,iInfoEnd-iFormStarttStream.Position = 0tStream.Type = 2tStream.Charset ="gb2312"sInfo = tStream.ReadTexttStream.Close'取得表单项目名称iFormStart = InStrB(iInfoEnd,RequestData,sStart)iFindStart = InStr(22,sInfo,"name=""",1)+6iFindEnd = InStr(iFindStart,sInfo,"""",1)sFormName = lcase(Mid (sinfo,iFindStart,iFindEnd-iFindStart))'如果是文件if InStr (45,sInfo,"filename=""",1) > 0 thenset theFile=new FileInfo'取得文件名iFindStart = InStr(iFindEnd,sInfo,"filename=""",1)+10iFindEnd = InStr(iFindStart,sInfo,""""&vbCrLf,1)sFileName = Mid (sinfo,iFindStart,iFindEnd-iFindStart)theFile.FileName=getFileName(sFileName)theFile.FilePath=getFilePath(sFileName)theFile.FileExt=GetFileExt(sFileName)'取得文件类型iFindStart = InStr(iFindEnd,sInfo,"Content-Type: ",1)+14iFindEnd = InStr(iFindStart,sInfo,vbCr)theFile.FileType =Mid (sinfo,iFindStart,iFindEnd-iFindStart)theFile.FileStart =iInfoEndtheFile.FileSize = iFormStart -iInfoEnd -3theFile.FormName=sFormNameif not objFile.Exists(sFormName) then  objFile.add sFormName,theFileend ifelse'如果是表单项目tStream.Type =1tStream.Mode =3tStream.OpenData_5xsoft.Position = iInfoEnd Data_5xsoft.CopyTo tStream,iFormStart-iInfoEnd-3tStream.Position = 0tStream.Type = 2tStream.Charset ="gb2312"        sFormValue = tStream.ReadText         tStream.Closeif objForm.Exists(sFormName) then  objForm(sFormName)=objForm(sFormName)&", "&sFormValue  else  objForm.Add sFormName,sFormValueend ifend ifiFormStart=iFormStart+iStart+1wend  RequestData=""  set tStream =nothingEnd SubPrivate Sub Class_Terminate   if Request.TotalBytes>0 thenobjForm.RemoveAllobjFile.RemoveAllset objForm=nothingset objFile=nothingData_5xsoft.Closeset Data_5xsoft =nothing end ifEnd Sub     Private function GetFilePath(FullPath)  If FullPath <> "" Then   GetFilePath = left(FullPath,InStrRev(FullPath, "/"))  Else   GetFilePath = ""  End If End  function Private function GetFileExt(FullPath)  If FullPath <> "" Then   GetFileExt = mid(FullPath,InStrRev(FullPath, ".")+1)  Else   GetFileExt = ""  End If End  function  Private function GetFileName(FullPath)  If FullPath <> "" Then   GetFileName = mid(FullPath,InStrRev(FullPath, "/")+1)  Else   GetFileName = ""  End If End  functionEnd ClassClass FileInfo  dim FormName,FileName,FilePath,FileSize,FileExt,FileType,FileStart  Private Sub Class_Initialize     FileName = ""    FilePath = ""    FileSize = 0    FileStart= 0    FormName = ""    FileType = ""    FileExt  = ""  End Sub   Public function SaveAs(FullPath)    dim dr,ErrorChar,i    SaveAs=true    if trim(fullpath)="" or FileStart=0 or FileName="" or right(fullpath,1)="/" then exit function    set dr=CreateObject("Adodb.Stream")    dr.Mode=3    dr.Type=1    dr.Open    Data_5xsoft.position=FileStart    Data_5xsoft.copyto dr,FileSize    dr.SaveToFile FullPath,2    dr.Close    set dr=nothing     SaveAs=false  end function  End Class</SCRIPT>
原创粉丝点击