• 全部
  • .NET Framework
  • ASP
  • Web Services
  • .NET互联网桌面应用
  • VB
  • 图表区
  • 分析与设计
  • 组件/控件开发
  • AppLauncher
  • 问答

如何在文件上传之前用客户端脚本判断文件的扩展名,并在后续的Form提交过程中避免文件被post到服务器端?

fzxz 2004-11-01 04:13:30
急!急!急!急!急!急!100分奉上
...全文
197 点赞 收藏 12
写回复
12 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
xzq686 2004-11-16
上面已经说好多了。我就对 cnhgj(戲子)补充一下吧。。。
因为有的扩展名不一定就是三位的。例如:.jpeg
所以要取得文件的扩展名而不是判断扩展名是否是什么的话。建议下面那样。。
nstr.lastIndexOf(".")+1
Page_Load()
{
btn.Attributes["onclick"] = "alert('此文件扩展名是:'file1.value.substr(document.all.file1.value.lastIndexOf(".")+1)";
}
上面是不带“.”的扩展名。如:jpeg,jpg,txt,exe等。要想带点稍加改动:
把file1.value.substr(document.all.file1.value.lastIndexOf(".")+1
改成:
file1.value.substr(document.all.file1.value.lastIndexOf(".")
即可。。
回复
xzq686 2004-11-16
上面已经说好多了。我就对 cnhgj(戲子)补充一下吧。。。
因为有的扩展名不一定就是三位的。例如:.jpeg
所以要取得文件的扩展名而不是判断扩展名是否是什么的话。建议下面那样。。
nstr.lastIndexOf(".")+1
Page_Load()
{
btn.Attributes["onclick"] = "alert('此文件扩展名是:'file1.value.substr(document.all.file1.value.lastIndexOf(".")+1)";
}
上面是不带“.”的扩展名。如:jpeg,jpg,txt,exe等。要想带点稍加改动:
把file1.value.substr(document.all.file1.value.lastIndexOf(".")+1
改成:
file1.value.substr(document.all.file1.value.lastIndexOf(".")
即可。。


回复
lxfmanning 2004-11-16
这里容易忽略的两点就是
this.button1.attribute.add("on_click","return xx()")
~~~~~~~~ ~~~~~~
这个应该改为onclick, return 千万不要忘了,不然就是先执行xx(),在执行服务器端事件了
回复
lxfmanning 2004-11-15
按照我刚才说的思路,这儿有个简单的示例:
//server code
this.button1.attribute.add("on_click","return xx()")

//client code
...
function xx()
{
do something
return true
}
点击button1按钮,则在执行服务器端的触发事件之前,会先执行客户端js函数xx()
如果xx return false 则不去执行服务器短程序
return true,则执行完客户端程序后接着执行服务器程序


显然,在你的问题中,可以把判断上传文件后缀名是不是.jpg的工作放到xx()函数中,如果是,则返回true,那将触发服务器事件。如果不是,则可以alert用户,并且返回false;而此时并不会发送到服务器端。

...
回复
lxfmanning 2004-11-15
这些问题可以归纳到一类:
在向服务器发出请求之前先执行一段客户端代码,如果满足一定条件则发送请求,如果不满足则不发送。
回复
spiderweb 2004-11-01
input file 不要runat=server
onmouseover过程里先读出文件路径 up_file.value
再截取扩展名。
不知这个思路对不对?
回复
zhn0410 2004-11-01
占个位学习,我以前也遇到类似的问题,但是没有解决。
回复
cnhgj 2004-11-01
Page_Load()
{
btn.Attributes["onclick"] = "if (file1.value.substring(document.all.file1.value.length - 4, document.all.file1.value.length) != ".gif"){alert('不是.gif');return false;}";
}
回复
Moon1 2004-11-01

其实,只要截获包含文件域的表单的提交就可以了。

///////////////
<%@ Page Language="C#" %>
<script language="C#" runat=server>
void Page_Load(Object src,EventArgs e)
{
if(Request.Files["upfile"] != null)
{
Response.Write(Request.Files["upfile"].FileName );
Response.Write(Request.Files["upfile"].ContentLength+"字节");
}
}

</script>
<html>
<head>
<script language="javascript">
function checkfiletype()
{
var srcFile = document.forms[0].upfile.value;
var extension = srcFile.substr(srcFile.lastIndexOf(".")+1);
//设定如果是aspx文件就不让上传;
if(extension.toLowerCase() == "aspx")
{
alert("不允许上传aspx文件.");
return false;
}
else
return true;
}
</script>
</head>
<body>
<form runat=server enctype="multipart/form-data" onsubmit="return checkfiletype()">
<input id="upfile" type=file runat=server>
<input type="submit" value="上传文件"><!-- 注意这里用纯的html控件 -->
</form>
//////////////////////////
回复
fzxz 2004-11-01
这位仁兄,我看了你给的代码,但我不明白你是怎么防止客户端判断为不合法的文件跟随Form被post出去的.
回复
iuhxq 2004-11-01
If action = "saveupload" Then
On Error Resume Next
server.ScriptTimeout = 999
Const filetype = ".gif.jpg.png.rar.zip.txt."'允许上传的文件类型。以.分隔
Const MaxSize = 2097152'允许的文件大小
Dim upload, File, formName, formPath
Set upload = New upload_5xsoft
If upload.Form("filepath")<>"" Then
formPath = upload.Form("filepath")
If Right(formPath, 1)<>"/" Then formPath = formPath&"/"
Set mypath = Server.CreateObject("Scripting.FileSystemObject")
If mypath.FolderExists(server.MapPath("./")&"\"&formPath)<>true Then
mypath.CreateFolder(server.MapPath("./")&"\"&formPath)
End If
For Each formName in upload.objFile
Set File = upload.File(formName)
temp = Split(File.FileName, ".")
fileExt = temp(UBound(temp))
If InStr(1, filetype, LCase(fileExt))>0 Or upload.Form("uppass") = pass Then
If upload.Form("checkbox") = "true" Then
Randomize
ranNum = Int(90000 * Rnd) + 10000
filename = Year(Now)&Month(Now)&Day(Now)&Hour(Now)&Minute(Now)&Second(Now)&ranNum&"."&fileExt
Else
filename = File.FileName
End If
If File.FileSize>0 And (File.FileSize<MaxSize Or upload.Form("uppass") = pass) Then
File.SaveAs Server.mappath(formPath&filename)
End If
Set File = Nothing
End If
Next
End If
response.Write("<script language='javascript'>window.opener.location.reload();self.close();</script>")
Set upload = Nothing
End If



<div id=tdcent style='position:relative;left:0;top:0'>
<div id="waitting" style="position:absolute; top:100px; left:240px; z-index:10; visibility:hidden">
<table border="0" cellspacing="1" cellpadding="0" bgcolor="0959AF">
<tr><td bgcolor="#FFFFFF" align="center">
<table width="160" border="0" height="50">
<tr><td valign="top" class="g1"><div align="center">操 作 执 行 中<br>请稍候... </div></td></tr>
</table>
</td></tr>
</table>
</div></div>
<div id="upload" style="visibility:visible">
<form name="form1" method="post" action="<%= url%>?action=saveupload" enctype="multipart/form-data" >
<table width="100%" height="24" border="1" cellpadding="0" cellspacing="0" bordercolor="#FFFFFF" bordercolorlight="#FFFFFF" bordercolordark="#000000">
<tr bgcolor="#CCCCCC"><td bgcolor="#CCCCCC">文件上传
<input type="hidden" name="act" value="upload"></td>
</tr>
<tr align="left" bgcolor="#EEEEEE"><td>
<li>需要上传的个数:<input name="upcount" class="tx" value="1"><input type="button" class="tx1" onclick="setid();" value="设定">
<li>上传到:<input name="filepath" class="tx" value="<%= request("filepath")%>">
<li>防止覆盖自动重命名<input name="checkbox" type="checkbox" value="true" checked>
<li>密码:<input name="uppass" type="password" class="tx">
</td></tr>
<tr><td align="left" id="upid"></td></tr>
<tr bgcolor="#EEEEEE"><td align="center" bgcolor="#EEEEEE">
<input type="submit" class="tx1" onClick="exec();" value="提交">
<input type="reset" class="tx1" value="重置">
<input type="button" class="tx1" onClick="window.close();" value="取消">
</td></tr>
</table>
</form></div>
<script language="JavaScript">
function exec()
{
waitting.style.visibility="visible";
upload.style.visibility="hidden";
}
function setid()
{
if(window.form1.upcount.value>0)
{
str='';
for(i=1;i<=window.form1.upcount.value;i++)
str+='文件'+i+':<input type="file" name="file'+i+'" style="width:400" class="tx1"><br>';
window.upid.innerHTML=str+'';
}
}
setid();
</script>
回复
iuhxq 2004-11-01
http://blog.csdn.net/iuhxq/archive/2004/06/03/20194.aspx
回复
发帖
.NET技术社区
创建于2007-09-28

5.8w+

社区成员

.NET技术交流专区
申请成为版主
帖子事件
创建了帖子
2004-11-01 04:13
社区公告
暂无公告