124792859 2011-1-4 07:41
有制作网页的高手没?求教
本人对上传到网页的图片格式做了限制,就是是有jpg pmg gif的格式才能上传上去,但是不知道是哪里出了问题 现在做有图片都上传不了,下面是限制文件格式的代码,请高手帮忙看看是不是代码写错了!
''列出所有上传了的文件
for each formName in upload.objFile
set file=upload.file(formName)
''''限制文件格式
fileExt=lcase(right(file.filename,4))
Forum_upload="gif,jpg,jpeg,png"
Forumupload=split(Forum_upload,",")
for i=0 to ubound(Forumupload)
if fileEXT="."&trim(Forumupload(i)) then
uploadsuc=true
exit for
else
uploadsuc=false
end if
next
if uploadsuc=false then
response.write "<font size=2>文件格式限制[<a href=# onclick=history.go(-1)>请重新上传</a>]</font>"
response.end
end If
'''''''''''''''
if file.filesize>0 then
sisghoul 2011-1-4 15:56
这个是检查头文件判断类型的
<% 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>
wshgm 2011-1-4 17:05
看了你的代码,还没看出哪里出问题了,建议你在几个节点上加断点,用respone反馈一下结果就比较容易查到问题所在了:
1. 在fileExt=lcase(right(file.filename,4))之后显示一下fileExt的值
2. 在 if fileEXT="."&trim(Forumupload(i)) then 下显示 i 和 "."&trim(Forumupload(i)) 后的结果,可以把"."&trim(Forumupload(i)) 先赋值到一个变量,再到if语句里面做比较,这样比较直观。
另外,建议:
1. 把 Forum_upload="gif,jpg,jpeg,png" 和 Forumupload=split(Forum_upload,",")都放到 for each formName in upload.objFile之上,这个过程只需做一次就可以了,不需要在循环里面做;
2. 把下面的代码
for i=0 to ubound(Forumupload)
if fileEXT="."&trim(Forumupload(i)) then
uploadsuc=true
exit for
else
uploadsuc=false
end if
next
改为
uploadsuc=false
for i=0 to ubound(Forumupload)
if fileEXT="."&trim(Forumupload(i)) then
uploadsuc=true
exit for
end if
next
kennywae 2011-1-4 18:44
虽然我不是高手但是我看出问题了,你上传的服务器限制了你的格式,建议换个服务器试试,或者联系卖给你虚拟机的IDC
antiy1984 2011-1-4 21:06
fileExt=lcase(right(file.filename,4))
这一句取后边4个字节,那如果是filename.gif的文件的话,是不是变成取".gif"出来,是不是错在这里呢,取文件扩展名的函数应该有的吧!