javascript实现限制上传文件大小


Posted in Javascript onFebruary 06, 2015

前言:

项目中经常用到需要上传文件、照片等功能,同时需要限制所上传文件的大小。很多插件都会采用后台请求验证,前端Js校验比较少。本篇介绍一个前端JS便捷判断上传文件大小的方法。

这个是比较好的

<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
  <script type="text/javascript">
    var isIE = /msie/i.test(navigator.userAgent) && !window.opera;

    function fileChange(target, id) {
      var fileSize = 0;
      var filetypes = [".jpg", ".png", ".rar", ".txt", ".zip", ".doc", ".ppt", ".xls", ".pdf", ".docx", ".xlsx"];
      var filepath = target.value;
      var filemaxsize = 1024 * 2;//2M
      if (filepath) {
        var isnext = false;
        var fileend = filepath.substring(filepath.indexOf("."));
        if (filetypes && filetypes.length > 0) {
          for (var i = 0; i < filetypes.length; i++) {
            if (filetypes[i] == fileend) {
              isnext = true;
              break;
            }
          }
        }
        if (!isnext) {
          alert("不接受此文件类型!");
          target.value = "";
          return false;
        }
      } else {
        return false;
      }
      if (isIE && !target.files) {
        var filePath = target.value;
        var fileSystem = new ActiveXObject("Scripting.FileSystemObject");
        if (!fileSystem.FileExists(filePath)) {
          alert("附件不存在,请重新输入!");
          return false;
        }
        var file = fileSystem.GetFile(filePath);
        fileSize = file.Size;
      } else {
        fileSize = target.files[0].size;
      }

      var size = fileSize / 1024;
      if (size > filemaxsize) {
        alert("附件大小不能大于" + filemaxsize / 1024 + "M!");
        target.value = "";
        return false;
      }
      if (size <= 0) {
        alert("附件大小不能为0M!");
        target.value = "";
        return false;
      }
    }
  </script>
</head>
<body>
<input type="file" name="contractFileName" style="width: 500px;" onchange="fileChange(this);"/>
</body>
</html>

下面的代码不建议使用

代码很简单,关键就是怎么用JS拿到文件然后获取文件大小,进而去判断拦截。由于各种历史原因,IE的ActiveX控件因素,获取文件的方法可能和其他浏览器有所不同,所以只需稍加判断即可。

JS代码:

<script type="text/javascript">  
  // 判断是否为IE浏览器: /msie/i.test(navigator.userAgent) 为一个简单正则
  var isIE = /msie/i.test(navigator.userAgent) && !window.opera;
  function fileChange(target){
    var fileSize = 0;
    if (isIE && !target.files) {  // IE浏览器
      var filePath = target.value; // 获得上传文件的绝对路径
      /**
       * ActiveXObject 对象为IE和Opera所兼容的JS对象
       * 用法:
       *     var newObj = new ActiveXObject( servername.typename[, location])
       *     其中newObj是必选项。返回 ActiveXObject对象 的变量名。
       *    servername是必选项。提供该对象的应用程序的名称。
       *    typename是必选项。要创建的对象的类型或类。
       *    location是可选项。创建该对象的网络服务器的名称。
       *\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
       *   Scripting.FileSystemObject 为 IIS 内置组件,用于操作磁盘、文件夹或文本文件,
       *  其中返回的 newObj 方法和属性非常的多
       *  如:var file = newObj.CreateTextFile("C:\test.txt", true) 第二个参表示目标文件存在时是否覆盖
       *  file.Write("写入内容");  file.Close();
       */
      var fileSystem = new ActiveXObject("Scripting.FileSystemObject");
      // GetFile(path) 方法从磁盘获取一个文件并返回。
      var file = fileSystem.GetFile(filePath);
      fileSize = file.Size;  // 文件大小,单位:b
    }
    else {  // 非IE浏览器
      fileSize = target.files[0].size;
    }
    var size = fileSize / 1024 / 1024;
    if (size > 1) {
      alert("附件不能大于1M");
    }
  }
</script>

HTML代码

<input type="file"  style="width: 500px;" onchange="fileChange(this);"/>

一个 简单、轻便、快捷 的用JS代码来判断文件大小的方法就OK了,至于ActiveXObject对象感兴趣的可以去深究,它可以根据入参的不同返回不同的对象,通常该对象的功能和作用也是非常有用和强大的。

本文内容就到这里了,是不是非常简单实用的代码呢,希望大家能够喜欢。

Javascript 相关文章推荐
Javascript里使用Dom操作Xml
Sep 20 Javascript
jquery对table中各数据的增加、保存、删除操作示例
May 14 Javascript
js清空form表单中的内容示例
May 20 Javascript
JS+CSS实现感应鼠标渐变显示DIV层的方法
Feb 20 Javascript
js父页面中使用子页面的方法
Jan 09 Javascript
jQuery插件简单学习实例教程
Jul 01 Javascript
微信小程序 setData的使用方法详解
Apr 20 Javascript
深入掌握 react的 setState的工作机制
Sep 27 Javascript
vue项目中导入swiper插件的方法
Jan 30 Javascript
Mint UI组件库CheckList使用及踩坑总结
Dec 20 Javascript
Vue 3.0双向绑定原理的实现方法
Oct 23 Javascript
JavaScript基于SVG的图片切换效果实例代码
Dec 15 Javascript
jquery实现鼠标滑过显示提示框的方法
Feb 05 #Javascript
javascript去除字符串左右两端的空格
Feb 05 #Javascript
jQuery判断对象是否存在的方法
Feb 05 #Javascript
jquery实现对联广告的方法
Feb 05 #Javascript
jquery实现在光标位置插入内容的方法
Feb 05 #Javascript
Jquery中offset()和position()的区别分析
Feb 05 #Javascript
JS实现一个按钮的方法
Feb 05 #Javascript
You might like
php目录管理函数小结
2008/09/10 PHP
PHP 执行系统外部命令 system() exec() passthru()
2009/08/11 PHP
Zend Framework教程之Zend_Registry对象用法分析
2016/03/22 PHP
javascript event在FF和IE的兼容传参心得(绝对好用)
2014/07/10 Javascript
原生js实现复制对象、扩展对象 类似jquery中的extend()方法
2014/08/30 Javascript
了不起的node.js读书笔记之mongodb数据库交互
2014/12/22 Javascript
JS实现的网页倒计时数字时钟效果
2015/03/02 Javascript
Angularjs中的事件广播 —全面解析$broadcast,$emit,$on
2016/05/17 Javascript
全面了解javascript中的错误处理机制
2016/07/18 Javascript
BootstrapTable+KnockoutJS自定义T4模板快速生成增删改查页面
2016/08/01 Javascript
JS实现将数字金额转换为大写人民币汉字的方法
2016/08/02 Javascript
在html中引入外部js文件,并调用带参函数的方法
2016/10/31 Javascript
JS实现密码框的显示密码和隐藏密码功能示例
2016/12/26 Javascript
JQueryEasyUI框架下的combobox的取值和绑定的方法
2017/01/22 Javascript
从零学习node.js之详解异步控制工具async(八)
2017/02/27 Javascript
深入理解Vue2.x的虚拟DOM diff原理
2017/09/27 Javascript
Node.js中你不可不精的Stream(流)
2018/06/08 Javascript
layui table 获取分页 limit的方法
2019/09/20 Javascript
vue中进行微博分享的实例讲解
2019/10/14 Javascript
js实现消灭星星(web简易版)
2020/03/24 Javascript
[01:03:13]VG vs Pain 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
Python解析json文件相关知识学习
2016/03/01 Python
对Python实现累加函数的方法详解
2019/01/23 Python
numpy.random.shuffle打乱顺序函数的实现
2019/09/10 Python
python根据字典的键来删除元素的方法
2020/08/16 Python
python空元组在all中返回结果详解
2020/12/15 Python
Python+Opencv实现把图片、视频互转的示例
2020/12/17 Python
浅析HTML5的WebSocket与服务器推送事件
2016/02/19 HTML / CSS
德国孕妇装和婴童服装网上商店:bellybutton
2018/04/12 全球购物
介绍一下Ruby的多线程处理
2013/02/01 面试题
讲座主持词
2014/03/20 职场文书
精神文明建设先进工作者事迹材料
2014/05/02 职场文书
捐款活动总结
2014/08/27 职场文书
小学生作文评语集锦
2014/12/25 职场文书
2015年科室工作总结
2015/04/10 职场文书
Redis遍历所有key的两个命令(KEYS 和 SCAN)
2021/04/12 Redis