<script type="text/javascript">
function onUploadImgChange(fileInput) {
var filePath = fileInput.value;
var fileExt = filePath.substring(filePath.lastIndexOf("."))
.toLowerCase();
if (!checkFileExt(fileExt))
{
alert("您上传的文件不是图片,请重新上传!");
return;
}
//火狐
if (fileInput.files && fileInput.files[0]) {
//alert(fileInput);
// alert(fileInput.files[0])
// alert('你选择的文件大小' + fileInput.files[0].size);
if(fileInput.files[0].size>(2*1024*1024)){
alert('您上传的图片超过大小,请重新上传');
return;
}
//var xx = fileInput.files[0];
//for ( var i in xx) {
// alert(xx[i])
//}
} else {
var agent = window.navigator.userAgent;
var isIE7 = agent.indexOf('MSIE 7.0') != -1;
var isIE8 = agent.indexOf('MSIE 8.0') != -1;
//IE7和IE8获得文件路径
if (isIE7 || isIE8) {
fileInput.select();
var url = document.selection.createRange().text;
try {
var fso = new ActiveXObject("Scripting.FileSystemObject");
} catch (e) {
alert('如果你用的是ie 请将安全级别调低!');
}
//alert("文件大小为:" + fso.GetFile(url).size);
var ie_size = fso.GetFile(url).size;
}else{
//ie6
var oFileChecker = document.getElementById("fileChecker");
oFileChecker.src = filePath;
oFileChecker.onreadystatechange = function ()
{
if (oFileChecker.readyState == "complete")
{
var limit = 2 * 1024*1024;
//alert(oFileChecker.fileSize)
if (oFileChecker.fileSize > limit){
alert("您上传的图片超过大小,请重新上传");
}else{
//alert("ok");
}
}
}
}
if(ie_size>(2*1024*1024)){
alert('您上传的图片超过大小,请重新上传');
return;
}
}
}
function checkFileExt(ext)
{
if (!ext.match(/.jpg|.jpeg|.gif|.png|.bmp/i)) {
return false;
}
return true;
}
</script>
<!--验证图片用--->
<img src="about:blank" id="fileChecker" name="fileChecker" alt="test" style="display:none;" height="18"/>
<input type="file" onchange="onUploadImgChange(this)" value="浏 览">
客户端验证上传文件大小,在IE下面可以很简单,但是需要修改ActiveX安全设置。同时火狐不支持ActiveX。于是这个问题就变得棘手了。
解决这个问题的直接思路:1.获得文件路径以后使用AJAX验证文件大小;2.查看浏览器内部属性方法看看到底是否支持读取本地文件大小。
第一种思路:首先获取上传控件的值(这个值就是上传文件在本地的路径),通过AJAX在后台可以轻易的得到文件详细信息,之后再利用回调函数做一些
处理工作。这种思路的关键在于--如何得到这个文件路径。稍微有点经验的人都知道,通过上传控件的id.value是得不到真实的文件路径,ie7和
ie8在路径里面加入了fakepath(只能看见盘符、fakepath、文件名)而火狐更狠,直接得到的是文件名。当然上述结论对IE6无效。
于是这个思路还需要好好研究,探索一番发现IE7和IE8获得文件路径还是有方法的:fileupload.select();
var path=document.selection.createRange().text。
这
个方法还没有仔细研究,从字面上看似乎是先把控件选择,然后再通过某种方式把选中的值找出来。。。(~~,知道的人顺便告知下)。这下子就只需要搞定火狐
了。baidu发现火狐获取路径还很麻烦,涉及到编码问题,找了几个答案都说得不明不白。闲话一段:感觉搜索引擎搜索专业问题都很无能为力,baidu如
此,google也如此。不过这也说明了搜索引擎的未来还可以变得更好。无奈之下转向第二种思路:查看各浏览器的内部实现,看看是不是有什么方法或者属性
直接读取上传文件的大小。首先在IE8的开发人员工具下断点调试,对fileupload的属性和方法一个个的找,毫无悬念的无果。于是不免叹气,IE7
和IE8都居然对JS访问本地文件做出这么严格的限制,想当然地以为火狐肯定也不行!但是还是不死心,还是找找看。于是拿起FireBug又是一番调试,
果然皇天不负有心人,最后终于让哥找到了这个属性: var size=fileupload.files[0].fileSize;
原来火狐居然可以直接读出文件大小,令人惊叹啊!
分享到:
相关推荐
js判断上传文件的大小(兼容火狐、谷歌、IE、360浏览器)
JS读取本地XML(支持IE和火狐和Google和Opea),已经测试过,Opea为9.64 for windows 中文版测试
一个不错的日期控件,支持IE、firefox及chrome,使用简单,个人感觉用起来比my97datepicker方便很多
html+js实现可拖动,兼容IE7及以上firefox、谷歌等各版本弹出层并锁屏效果代码,基本功能都实现了。对要求不高的可以使用。
javascript 上传并预览图片(兼容IE,6,7,8,9+,谷歌,火狐,Safari)移动端也可以。
让IE(包括IE6)支持HTML5元素,我们需要在HTML头部添加以下JavaScript,这是一个简单的document.createElement_x声明,利用条件注释针对IE来调用这个js文件。Opera,FireFox等其他非IE浏览器就会忽视这段代码,也...
js上传前预览图片,兼容IE,firefox,google
在IE6,IE7,IE8,chrome谷歌浏览器6.0.472.55,FireFox火狐3.6.8下测试通过 需要说明的是,测试时间不多,所以可能测试不够详细,欢迎大家指出bug,并在我的博客发表回复:http://beinet.cn 注意:刚刚测出一个bug,请...
通过js实现谷歌浏览器自动打开IE浏览器,压缩包里有教程和代码,火狐、360浏览器应该也可以,请自行尝试,本人实际项目中使用的谷歌浏览器
swfupload上传图片控件,支持删除。兼容浏览器ie7+,火狐,谷歌。上传界面类似QQ空间发表说说界面。
经过测试的图片上传预览,支持主流浏览器,经过测试的,代码更加的简单
JS日期选择器(兼容IE,FireFox,Oprea,chrome等主流浏览器)
组件特点: 1. 支持断点续上传 2. 支持任意大文件上传 3. 支持ASP,JSP,C#,VB.NET,PHP等多种后台开发语言,与第三方系统整合方便...9.支持目前市面上任何浏览器(IE系列,火狐,GOOGLE浏览器等),不存在任何兼容性问题
js人脸检测,调用摄像头检测人脸,出现人脸框,自动保存图片,后台比对,支持360、谷歌、火狐大部分浏览器, 不支持ie
IE6-IE11已测试可准确识别; 腾讯QQ、搜狗、猎豹、谷歌、苹果已测试可准确识别(极速模式); 360兼容模式伪装IE、极速模式伪装谷歌,流氓一步到位,目前还没有好办法准确识别; 火狐、遨游、欧朋、世界之窗未进行...
js导出excel文件,支持chrome、ie、firefox等主流浏览器 js导出excel文件,支持chrome、ie、firefox等主流浏览器
超好用的js操作Excel实现数据导入导出JS包。只需引入JS包即可完成功能开发。压缩包中有Demo,参照编写即可。
js浏览器判断,火狐,谷歌,IE等五大浏览器判断,浏览器的判断有助于您的JSP页面的图片能正常显示
因为有一个项目要用到iframe自适应高度,网上搜索了以下结果无数,不过看来看去都是那...iframe自适应高度,亲测完美兼容IE6_7_8_9,Chrome谷歌浏览器,Opera欧朋浏览器,FireFox火狐浏览器,Mac Safari浏览器等五大浏览器