凤来仪

专业的计算机学习网站

首页 > ASP无组件文件上传

ASP无组件文件上传

点击:1029 发布时间:

ASP无组件文件上传。解决了在FireFox浏览器,及禁用了“将文件上载到服务器时包含本地目录路径”的IE浏览器中,出现错误的情况。

ExtName = "jpg,gif,png,bmp"    '允许扩展名
SavePath="/upfile/"
CheckAndCreateFolder(SavePath)

UpLoadAll_a = Request.TotalBytes '取得客户端全部内容
If(UpLoadAll_a>0) Then
    Set UploadStream_c = Server.CreateObject("ADODB.Stream")
    UploadStream_c.Type = 1
    UploadStream_c.Open
    UploadStream_c.Write Request.BinaryRead(UpLoadAll_a) 
    UploadStream_c.Position = 0

    FormDataAll_d = UploadStream_c.Read
    CrLf_e = chrB(13)&chrB(10)
    FormStart_f = InStrB(FormDataAll_d,CrLf_e)
    FormEnd_g = InStrB(FormStart_f+1,FormDataAll_d,CrLf_e)

    Set FormStream_h = Server.Createobject("ADODB.Stream")
    FormStream_h.Type = 1
    FormStream_h.Open
    UploadStream_c.Position = FormStart_f + 1
    UploadStream_c.CopyTo FormStream_h,FormEnd_g-FormStart_f-3
    FormStream_h.Position = 0
    FormStream_h.Type = 2
    FormStream_h.CharSet = "GB2312"
    FormStreamText_i = FormStream_h.Readtext
    FormStream_h.Close
	
    if instr(FormStreamText_i,"\")<>0 then
        FileName_j = Mid(FormStreamText_i,InstrRev(FormStreamText_i,"\")+1,FormEnd_g)
    else
        FileName_j = Mid(FormStreamText_i,InstrRev(FormStreamText_i,"=")+2,FormEnd_g)
    end if

'没禁用“将文件上载到服务器时包含本地目录路径”的IE浏览器中:
'FormStreamText_i的值:Content-Disposition: form-data; name="upfile"; filename="C:\Documents and Settings\Administrator\2012-7-11\files\head_32.jpg
'FileName_j = Mid(FormStreamText_i,InstrRev(FormStreamText_i,"\")+1,FormEnd_g)的值:head_32.jpg

'在FireFox浏览器,及禁用了“将文件上载到服务器时包含本地目录路径”的IE浏览器中:
'FormStreamText_i的值:Content-Disposition: form-data; name="upfile"; filename="head_32.jpg
'FileName_j = Mid(FormStreamText_i,InstrRev(FormStreamText_i,"\")+1,FormEnd_g)的值:Content-Disposition: form-data; name="upfile"; filename="head_32.jpg
    
    If(CheckFileExt(FileName_j,ExtName)) Then
        SaveFile = Server.MapPath(SavePath&FileName_j)
		
        If Err Then
            Response.Write "文件上传: <span style='color:red;'>文件上传出错!</span>"
		    Response.write "<a href='"&Request.ServerVariables("URL") &"'>重新上传文件</a>"
            Err.Clear
        Else
            SaveFile = CheckFileExists(SaveFile)
            k=Instrb(FormDataAll_d,CrLf_e&CrLf_e)+4
            l=Instrb(k+1,FormDataAll_d,leftB(FormDataAll_d,FormStart_f-1))-k-2
            FormStream_h.Type=1
            FormStream_h.Open
            UploadStream_c.Position=k-1
            UploadStream_c.CopyTo FormStream_h,l
            FormStream_h.SaveToFile SaveFile,2
        
            SaveFileName = Mid(SaveFile,InstrRev(SaveFile,"\")+1)
            Response.write "文件上传: <span style='color:red;'>" &SaveFileName&"</span>"
	    	Response.write "文件上传成功!<a href='javascript:void(null);' onclick='window.opener.location.reload();window.close();'>关闭</a>"
		   
	        set rs=server.createobject("adodb.recordset")
            sql="select filename from news where id="&id
            rs.open sql,db,1,3    
            rs("filename")=SaveFileName
            rs.update
            rs.close:set rs=nothing
            db.close:set db=nothing	
        End If
    Else
        Response.write "文件上传: <span style='color:red;'>文件格式不正确!</span>"
	    Response.write "<a href='"&Request.ServerVariables("URL")&"'>重新上传文件</a>"
    End If

Else
    '此处是上传文件的HTML文件,为了本文排版方便,此处用ASP输出,望各位网友见谅!
    Response.write "<script type='text/javascript'>"
    Response.write "function ValidInput(){"   
    Response.write "if(document.upform.upfile.value==''){"
    Response.write "alert('请选择上传文件!');"
    Response.write "document.upform.upfile.focus();"
    Response.write "return false;"
    Response.write "}"
    Response.write "return true;"
    Response.write "}"
    Response.write "</script>"
    Response.write "<form action='"&Request.ServerVariables("URL")&"' method='post' name='upform' onsubmit='return ValidInput()'  enctype='multipart/form-data'>"
    Response.write "<input type='file' name='upfile' size='40' />"
    Response.write "<input type='submit' value='上传'>"
    Response.write "</form>"
End if

  '判断文件类型是否合格
  Function CheckFileExt(FileName,ExtName) '文件名,允许上传文件类型
    FileType = ExtName 
    FileType = Split(FileType,",")
    For i = 0 To Ubound(FileType)
      If LCase(Right(FileName,3)) = LCase(FileType(i)) then
      CheckFileExt = True
      Exit Function
      Else
      CheckFileExt = False
      End if
    Next
  End Function

  '检查上传文件夹是否存在,不存在则创建文件夹
  Function CheckAndCreateFolder(FolderName)
    fldr = Server.Mappath(FolderName)
    Set fso = CreateObject("Scripting.FileSystemObject")
    If Not fso.FolderExists(fldr) Then
      fso.CreateFolder(fldr)
    End If
    Set fso = Nothing
  End Function

  '检查文件是否存在,重命名存在文件
Function CheckFileExists(FileName)
  Set fso=Server.CreateObject("Scripting.FileSystemObject")
  If fso.FileExists(SaveFile) Then
    i=1
    msg=True
    Do While msg
      CheckFileExists = Replace(SaveFile,Right(SaveFile,4),"_"&i&Right(SaveFile,4))
      If not fso.FileExists(CheckFileExists) Then
        msg=False
      End If
      i=i+1
    Loop
  Else
    CheckFileExists = FileName
  End If
  Set fso=Nothing
End Function