目前有上传文件的功能,使用.net的uploadfile控件直接做的。录入附件大小限制为10M,
if (FileUpload1.PostedFile.ContentLength > 10485760)
,但是需要上传到服务器之后才判断是否超过限制,假如用户上传的附件较大的话,上传完了才提示用户体验就不好了。请问各位对于文件上传以及限制一般是怎样处理的呢?或者是使用什么其他的组件呢?
客户端Javascript没有权限获取文件大小的。
除了那个activeX外。 不过那个也不算好办法
一般是用flash或者Silverlight来做。
特例就是, IE6下有bug,
IMG对象的dynsrc是可以指向本地文件, 并且获取文件长度的。
不过这个局限性太大
除非你们做内网项目并且客户刚好是用IE6并且不打算升级。
你可以朝flash方向努力
有很多开源的控件的
甚至还有一个jquery插件。 不过最后也是用的一个flash来搞定的。
你可以搜下。
试试这个组件:NeatUpload
谢谢dudu站长。我测试了一下,NeatUpload是上传效果挺好,还有进度条呢。不过他能实现在上传前检测文件大小吗?
@丫头小静(Cathy): 不好意思,我没在实际项目中使用过。
不会吧。你可以先判断,后上传啊。
您能说具体点嘛?怎么先判断呢?用js吗?
谢谢,不过我好想没看出来最终的方案是什么
@丫头小静(Cathy): 第一种方法:上传之前判断
@张小线:
你好,我试了一下这种方式,确实可以验证。
不过我用200M文件测试的时候发现还是挺慢的,他应该也是先传上去在验证的吧?
可以通过在Web.config中设置上传文件的大小,并且在上传之前做验证就可以了:
web.config配制:
<system.web>
<!--修改要上传文件的大小-->
<httpRuntime maxRequestLength="102400" executionTimeout="600" appRequestQueueLimit="1000"/>
</system.web>
上传之前做验证:
if (this.FileUpload1.PostedFile.ContentLength > 1024 * 1024 * 10)
{
//上传文件的大小超过了10M.
}
else
{
//上传文件
}
你好,上传大文件已经配置过了。也是用的this.FileUpload1.PostedFile.ContentLength 这宗判断方法,可是这种方法好像也是等文件上传上去之后才检测出来的,你上传个几百兆的大文件,就会发现等了好久才会提示。
嗯,文件太大的话,是有点慢了。。。
你用下面这个脚本可以很快的获取上传文件的大小:
function getFileSize(filePath) {
var fso = new ActiveXObject("Scripting.FileSystemObject");
alert("文件大小为:" + fso.GetFile(filePath).size);//这里是弹出的,可以保存到控件在页面显示
}
<input type="file" onchange="getFileSize(this.value);"/>
可以把获取到的值保存到一个label里显示出来,再去进行比较。。。
我想这样应该会快一点了吧
@白雲天:
这个我刚才也试了,可是会有安全提示,估计还是过不了关
<html>
<head>
<script>
function getFileSize(fileName) {
if (document.all) {
window.oldOnError = window.onerror;
window.onerror =function (err) {
if (err.indexOf('utomation') !=-1) {
alert('没有访问文件的权限');
returntrue;
}
else
returnfalse;
};
var fso =new ActiveXObject('Scripting.FileSystemObject');
var file = fso.GetFile(fileName);
window.onerror = window.oldOnError;
return parseInt(file.Size /1024) +'K';
}
}
</script>
</head>
<body>
<form name="formName">
<input type="file" name="fileName" onchange="alert(getFileSize(this.form.fileName.value))"><br>
</form>
</body>
</html>
嗯,看来要找找其它方法了。看看能不能用带进度条的上传控件,这样虽然有时候也会很慢,但对于客户体验来说还是好一些的。。。比如:fileuploadify
fso.GetFile(filePath).size:
可以顺着这个自己去实现呀。。activeX控件这个东西。。。
你可以试试jq插件uploadify.也是采用了flash.
uploadify++