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