sisghoul 发表于 2011-1-4 15:56 全显示 1楼 |
---|
这个是检查头文件判断类型的 <% Rem Designer:ZMM If Request.ServerVariables("REQUEST_METHOD")="POST" Then Function GetByteString(str) For i=1 To Len(str) GetByteString = GetByteString & ChrB(Asc(Mid(str, i, 1))) Next End Function Dim vbCRLFbyte, i, formLength, formContent, formStream, pathStart, pathEnd, pathLength, pathContent, formText, fileStart, fileEnd, fileLength, regEx, Matches, contentType, fileType, fileExtension, fileName, fileStreamGet, fileStreamPut Const adTypeBinary = 1 Const adTypeText = 2 vbCRLFbyte = GetByteString(vbCRLF & vbCRLF) formLength = Request.TotalBytes formContent = Request.BinaryRead(formLength) Set formStream = Server.CreateObject("ADODB.Stream") formStream.Type = adTypeText formStream.Mode = 3 formStream.Open formStream.WriteText formContent formStream.Position = 0 formStream.CharSet = "GB2312" formText = formStream.ReadText formStream.Close Set formStream = Nothing Rem 获取文件头 Set regEx = New RegExp regEx.Pattern = "\sContent-Type:\s+(.*?)\s" regEx.Global = True regEx.IgnoreCase = True Set Matches = regEx.Execute(formText) Set regEx = Nothing contentType = Replace(Mid(Matches(0).Value, 1, Len(Matches(0).Value) - 1), "Content-Type: ", "") fileType = Split(contentType, "/", -1, 1)(1) pathStart = InStr(1, formText, "filename=" & Chr(34)) + 10 pathEnd = InStr(pathStart, formText, Chr(34)) pathLength = pathEnd - pathStart pathContent = Mid(formText, pathStart, pathLength) Set regEx = New RegExp regEx.Pattern = "^.*(\.[^\.]*)$" regEx.Global = False regEx.IgnoreCase = True fileExtension = regEx.Replace(pathContent, "$1") Set regEx = Nothing fileName = Year(Now) & Month(Now) & Day(Now) & Hour(Now) & Minute(Now) & Second(Now) & fileExtension If InStr(1, "|GIF|PJPEG|X-PNG|BMP|", "|" & Ucase(fileType) & "|")>0 Then fileStart = InStrB(1, formContent, vbCRLFbyte) + 3 fileEnd = formLength - 48 fileLength = fileEnd - fileStart + 1 Set fileStreamGet = Server.CreateObject("ADODB.Stream") fileStreamGet.Type = adTypeBinary fileStreamGet.Mode = 3 fileStreamGet.Open fileStreamGet.Write formContent fileStreamGet.Position = fileStart Set fileStreamPut = Server.CreateObject("ADODB.Stream") fileStreamPut.Type = adTypeBinary fileStreamPut.Mode = 3 fileStreamPut.Open fileStreamPut.Write fileStreamGet.Read(fileLength) fileStreamPut.SaveToFile(Server.MapPath(fileName)) fileStreamGet.Close Set fileStreamGet = Nothing fileStreamPut.Close Set fileStreamPut = Nothing Response.Write "<script language=""javascript""> window.alert('文件上传成功!'); window.location.replace('" & Request.ServerVariables("SCRIPT_NAME") & "'); </script>" Else Response.write "filetype=" & filetype Response.Write "<script language=""javascript""> window.alert('不允许上传此类型文件,上传失败!'); window.location.replace('" & Request.ServerVariables("SCRIPT_NAME") & "'); </script>" End If End If %> <html> <head> <title>上传文件</title> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> </head> <body> <form action="<%=Request.ServerVariables("SCRIPT_NAME")%>" method="post" enctype="multipart/form-data" onsubmit="return (oFile.value!='');"> <input type="file" name="oFile" onkeydown="return false;" oncontextmenu="return false;" onpaste="return false;" ondragenter="return false;"> <input type="submit" value="上传文件"> </form> </body> </html> |
0 |