请教asp.net上传时,可不可以在客户端判断文件大小?如果可以,怎么做?

时间:2021-07-05 08:34:17
asp.net上传文件时,我感觉需要将文件存入内存后才能判断出文件大小,这样,遇到传很大的文件,还等不到判断大小,内存就放不下了,就出错,请教各位,可不可以在客户端判断大小,大的根本就不用往内存中存了。如果可以,怎么做?

6 个解决方案

#1


在线等,拜托各位了!

#2


<httpRuntime
executionTimeout="500" 
maxRequestLength="11264"
useFullyQualifiedRedirectUrl="false" 
minFreeThreads="8" 
minLocalRequestFreeThreads="4"
appRequestQueueLimit="100"

     />

配置文件里设置. 
这个是 
maxRequestLength="11264"
文件大小

#3


<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>无标题文档</title>
<script language="vbscript">
function getSize()         
 Set fso=CreateObject("Scripting.FileSystemObject")
 Set fl=fso.getfile("c:\a.txt")
 flsize=fl.size
 flName=fl.name
 Set fl=Nothing
 Set fso=Nothing
        msgbox("文件:"&flName&" 大小:"&flsize&"字节")
End function
</script>
</head>

<body>
<form name="form1" method="post" action="">
  <input type="button" name="Submit" value="按钮"  onClick="getSize()">
</form>
</body>
</html>

#4


正在调试:
1)先是在<head></head>间加上了客户端函数:改成javascript的getSize();
2)在Page_Load里加上imagebutton.Attributes.Add("onClick","return getSize();");
3) 把imagebutton的Click中对imagebutton_Click()的调用去掉;
4) 在getSize()末尾加上document.all("imagebutton").click();执行验证合格后的服务器端程序。

问题是:在执行new ActiveXObject("Scripting.FileSystemObject");时,提示出错:Automation服务器不能创建对象。

继续调试ing

#5


要直接说,只能说“不可以”。因为你“不一定”能够在post开始前知道读取到文件大小。

用FSO是一种方法,但你不能保证客户端存在FSO——那是windows吗?脚本权限足够用FSO吗?能用脚本吗?……这些都是不确定的。而且客户端script也只是启到一定的自动化引导作用,你千万不能指望script能真正的“阻止”“非法数据”(在这个问题上,过大的文件就是“非法数据”)

我的建议是,参考simonzone(假如人生可以存盘......)说的那样,在http协议层限制内容大小。因为在每一个http request中,header都应该有一个content-length说明这次请求的总长度,也就是说如果用法发送一个Request,长度超过你的上传限制,你就直接把这个Request后面的内容cut掉不再理会,返回信息告诉用户文件过大。不过对于用户来说,无论如何他都要等这个Request把整个文件发送完毕……这是不可避免的……如果你明明写着限制上传300K,他还有上传30M,你就让他去咯。

#6


感谢各位指点

#1


在线等,拜托各位了!

#2


<httpRuntime
executionTimeout="500" 
maxRequestLength="11264"
useFullyQualifiedRedirectUrl="false" 
minFreeThreads="8" 
minLocalRequestFreeThreads="4"
appRequestQueueLimit="100"

     />

配置文件里设置. 
这个是 
maxRequestLength="11264"
文件大小

#3


<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>无标题文档</title>
<script language="vbscript">
function getSize()         
 Set fso=CreateObject("Scripting.FileSystemObject")
 Set fl=fso.getfile("c:\a.txt")
 flsize=fl.size
 flName=fl.name
 Set fl=Nothing
 Set fso=Nothing
        msgbox("文件:"&flName&" 大小:"&flsize&"字节")
End function
</script>
</head>

<body>
<form name="form1" method="post" action="">
  <input type="button" name="Submit" value="按钮"  onClick="getSize()">
</form>
</body>
</html>

#4


正在调试:
1)先是在<head></head>间加上了客户端函数:改成javascript的getSize();
2)在Page_Load里加上imagebutton.Attributes.Add("onClick","return getSize();");
3) 把imagebutton的Click中对imagebutton_Click()的调用去掉;
4) 在getSize()末尾加上document.all("imagebutton").click();执行验证合格后的服务器端程序。

问题是:在执行new ActiveXObject("Scripting.FileSystemObject");时,提示出错:Automation服务器不能创建对象。

继续调试ing

#5


要直接说,只能说“不可以”。因为你“不一定”能够在post开始前知道读取到文件大小。

用FSO是一种方法,但你不能保证客户端存在FSO——那是windows吗?脚本权限足够用FSO吗?能用脚本吗?……这些都是不确定的。而且客户端script也只是启到一定的自动化引导作用,你千万不能指望script能真正的“阻止”“非法数据”(在这个问题上,过大的文件就是“非法数据”)

我的建议是,参考simonzone(假如人生可以存盘......)说的那样,在http协议层限制内容大小。因为在每一个http request中,header都应该有一个content-length说明这次请求的总长度,也就是说如果用法发送一个Request,长度超过你的上传限制,你就直接把这个Request后面的内容cut掉不再理会,返回信息告诉用户文件过大。不过对于用户来说,无论如何他都要等这个Request把整个文件发送完毕……这是不可避免的……如果你明明写着限制上传300K,他还有上传30M,你就让他去咯。

#6


感谢各位指点