`
刘逸君
  • 浏览: 39089 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

js限制本地上传文件大小(支持ie6,7,8 firefox 谷歌)

    博客分类:
  • js
 
阅读更多
<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;

原来火狐居然可以直接读出文件大小,令人惊叹啊!

分享到:
评论
1 楼 kely39 2016-08-12  
不可能让所有用户都去设置IE8安全级别吧,这方法不明智。

相关推荐

    js判断上传文件的大小(兼容火狐、谷歌、IE、360浏览器)

    ### js判断上传文件的大小(兼容火狐、谷歌、IE、360浏览器) 在Web开发中,经常需要处理用户上传文件的操作。为了确保服务器安全并优化用户体验,开发者需要对上传文件进行一定的预处理,例如限制文件大小。本文将...

    JS读取本地XML(支持IE和火狐和Google和Opea)

    以下是对"JS读取本地XML(支持IE和火狐和Google和Opea)"这个主题的详细讲解: 1. **FileReader API**: 浏览器提供了一个名为`FileReader`的API,允许我们读取用户选择的本地文件,包括XML文件。`FileReader`对象有...

    ie6、ie7、ie8、ie9、ie10、firefox、google chrome浏览器Hack及兼容性演示页面

    这里我们将深入探讨标题中提到的`ie6`到`ie10`以及`Firefox`和`Google Chrome`浏览器的兼容性问题,以及它们所基于的`Gecko`和`WebKit`内核。 首先,`IE6`至`IE10`是微软公司推出的一系列Internet Explorer浏览器,...

    百度多文件上传webuploaddemo例子支持ie6以上、火狐、谷歌

    这个WebUploader demo实例特别强调了对IE6及以上版本,以及Firefox和Chrome等主流浏览器的支持,确保在不同环境下都能实现稳定、高效的文件上传功能。 WebUploader的核心原理是利用HTML5的File API进行文件读取、...

    国外的多文件上传带预览(支持IE、火狐、谷歌、opera)

    8. **安全性**:为了防止恶意文件上传,开发者还需要进行安全检查,如限制文件类型、大小,甚至进行文件内容的安全扫描。 从提供的文件列表来看,“production”可能是一个生产环境的文件夹,包含了实现上述功能的...

    js判断上传文件大小,支持多种浏览器

    由于项目需要,在网上找了一个JS判断上传文件大小的程序,经测试兼容IE6-9,Firefox10,Opera11.6,safari5.1,chrome17

    JS导入导出Excel 兼容IE、Firefox、Chrome等浏览器

    "JS导入导出Excel 兼容IE、Firefox、Chrome等浏览器"这一技术主题,聚焦于如何使用JavaScript(JS)在各种浏览器环境下处理Excel文件,包括古老的Internet Explorer(IE)、Firefox以及Chrome。下面我们将深入探讨这...

    js日期控件 支持IE、firefox、chrome

    本压缩包提供的是一款跨浏览器的JS日期控件,兼容IE、Firefox和Chrome这三种主流浏览器,为开发者提供了一种轻量级且易于使用的解决方案。 首先,我们来看一下"js日期控件"这个概念。JavaScript是一种广泛应用于...

    兼容IE6+的文件上传控件plupload工具包

    它不仅支持HTML5的先进特性,如拖放上传,同时也为不支持HTML5的浏览器提供了回退方案,确保在谷歌、火狐以及不同版本的IE(包括6、7、8、9和10)等主流浏览器上的兼容性。 **1. 功能特性** - **多浏览器兼容**:...

    ie6 火狐 谷歌 png背景透明

    2. **火狐和谷歌浏览器的PNG支持**:与IE6不同,Firefox和Chrome(谷歌浏览器)自早期版本起就很好地支持了PNG的完全透明,无论是PNG-8还是PNG-24格式,都可以正确地显示图像的alpha透明效果。 3. **解决IE6 PNG...

    mxGraph破解包含ie和firefox

    6. **测试和调试**:使用像BrowserStack这样的在线工具,或本地的虚拟机环境,进行跨浏览器测试,确保在各个版本的IE和Firefox上都能正常运行。 7. **利用社区资源**:查找和应用社区提供的已知解决方案,如GitHub...

    在线预览PDF(无需任何插件) 支持IE/Firefox/Coogle

    6. **浏览器兼容性**:针对IE、Firefox和Chrome等不同浏览器,可能需要针对其特性进行特定的代码优化和适配。例如,对于IE,可能需要使用条件注释或polyfill来兼容旧版本的JavaScript API。 7. **响应式设计**:...

    swfupload上传控件demo支持上传,删除图片。兼容ie7+,火狐,谷歌浏览器

    标题和描述提到的"swfupload上传控件demo"是一个示例项目,展示了如何在实际应用中集成SwfUpload,实现图片的上传和删除功能,并且兼容IE7及以上版本,以及Firefox和Google Chrome等主流浏览器。 SwfUpload的核心...

    真正实现ajax上传文件 兼容IE6789火狐谷歌世界之窗

    在现代Web开发中,文件上传是一个常见的功能,但要实现跨浏览器兼容性,尤其是在旧版本的Internet Explorer(如IE6、IE7、IE8、IE9)以及Firefox、Chrome和世界之窗等其他浏览器上,可能面临一些挑战。Ajax上传文件...

    JS日期选择器(兼容IE,FireFox,Oprea,chrome等主流浏览器)

    "JS日期选择器(兼容IE,FireFox,Oprea,chrome等主流浏览器)"是一个专门为JavaScript环境设计的,旨在解决跨浏览器兼容性问题的日期选择工具。这个组件的目标是确保在不同浏览器如Internet Explorer(IE)、Firefox、...

    FireFox支持OCX插件

    标题中的“Firefox支持OCX插件”意味着Mozilla Firefox这款开源网络浏览器可以运行OCX(ActiveX Control)组件,这是微软Windows平台下的一种交互式对象技术。通常,OCX插件用于增强网页的功能,如播放媒体、执行...

    jquery 弹出框,可以拖动。在任兼容ie6~ie9 firefox 谷歌

    在任兼容ie6~ie9 firefox 谷歌”指的是一个基于jQuery实现的弹出对话框插件,它具有拖动功能,并且兼容Internet Explorer 6到9,以及Firefox和Google Chrome等现代浏览器。这个插件可能采用了jQuery的核心功能,如...

    js上传前预览图片,兼容IE,firefox,google

    这个话题涉及到的主要技术是JavaScript,特别是如何使用JavaScript来实现跨浏览器(包括IE、Firefox和Google Chrome)的图片预览功能。下面将详细介绍这一知识点。 首先,我们需要理解浏览器对文件API的支持。现代...

    谷歌浏览器js打开IE浏览器.rar

    对于其他浏览器如Firefox或360浏览器,可能需要对代码进行相应的调整,因为它们可能不支持所有相同的API或对象。务必遵循良好的编码实践,包括错误处理和兼容性检查,以确保代码在不同环境下的稳定性。 总的来说,...

    html+js实现可拖动,兼容IE7及以上firefox、谷歌等各版本弹出层并锁屏效果代码

    在这个项目中,我们讨论的是如何使用这两种语言来创建一个可拖动的弹出层,并实现兼容IE7及以上版本,包括Firefox和Chrome在内的多种浏览器的锁屏效果。这个功能在网页应用中很常见,比如在显示模态对话框或提示信息...

Global site tag (gtag.js) - Google Analytics