最近写个文件上传功能,要限制文件的大小。一开始是在后台检测的,但测试的时候发现,文件比较大的时候,在服务器事件响应之前要等很长时间;而当文件很大的时候,页面直接IIS将会直接抛出异常。服务器端检测不行,那只好在客户端检测了,于是 Google 下具体的 JS 代码。
function
getFileSize (fileName)
...
{
if(document.all)...{
window.oldOnError = window.onerror;
window.onerror = function(err)...{
if(err.indexOf('utomation') != -1)...{
alert('没有访问文件的权限');
return true;
}else...{
return false;
}
};
var fso = new ActiveXObject('Scripting.FileSystemObject');
var file = fso.GetFile(fileName);
window.onerror = window.oldOnError;
return file.Size;
}
}
if(document.all)...{
window.oldOnError = window.onerror;
window.onerror = function(err)...{
if(err.indexOf('utomation') != -1)...{
alert('没有访问文件的权限');
return true;
}else...{
return false;
}
};
var fso = new ActiveXObject('Scripting.FileSystemObject');
var file = fso.GetFile(fileName);
window.onerror = window.oldOnError;
return file.Size;
}
}
这段 JS 虽然能完成功能,但有些限制。
1、只能在 IE 中使用。
2、要使用 FSO 组件。(没注册的可以在命令行使用 "regsvr32 scrrun.dll" 注册)
3、用户必须把站点设为 “只信站点”。或是把 "Internet 选项" 中的 "安全" 里的 "对未标记为可安全执行脚本的 ActiveX 控件初始化并执行脚本" 设为 "启用" 或 "提示"。
但第3点是最致命的,最终没有采用。
刚才突然想到我这有个上传大文件的 Flash,应该可以改造下实现这个功能。