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 带有滚动条的表格,标题固定,带排序功能.
Nov 13 Javascript
JavaScript入门之事件、cookie、定时等
Oct 21 Javascript
jQuery scroll事件实现监控滚动条分页示例
Apr 04 Javascript
jQuery实现可用于博客的动态滑动菜单完整实例
Sep 17 Javascript
javascript从作用域链谈闭包
Jul 29 Javascript
jQuery+css实现非常漂亮的水平导航菜单效果
Jul 27 Javascript
Vuejs第十篇之vuejs父子组件通信
Sep 06 Javascript
微信小程序实战之运维小项目
Jan 17 Javascript
原生js实现轮播图的示例代码
Feb 20 Javascript
angular4 JavaScript内存溢出问题
Mar 06 Javascript
webpack4之如何编写loader的方法步骤
Jun 06 Javascript
echarts大屏字体自适应的方法步骤
Jul 12 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 Error与Logging函数的深入理解
2013/06/03 PHP
PHP5.5在windows安装使用memcached服务端的方法
2014/04/16 PHP
PHP加MySQL消息队列深入理解
2021/02/27 PHP
认识延迟时间为0的setTimeout
2008/05/16 Javascript
jQuery根据纬度经度查看地图处理程序
2013/05/08 Javascript
JS如何判断移动端访问设备并解析对应CSS
2013/11/27 Javascript
jQuery scroll事件实现监控滚动条分页示例
2014/04/04 Javascript
Javascript字符串对象的常用方法简明版
2014/06/26 Javascript
2014 HTML5/CSS3热门动画特效TOP10
2014/12/07 Javascript
JavaScript中定义类的方式详解
2016/01/07 Javascript
Three.js利用Detector.js插件如何实现兼容性检测详解
2017/09/26 Javascript
vue2中,根据list的id进入对应的详情页并修改title方法
2018/08/24 Javascript
浅谈js中的bind
2019/03/18 Javascript
Python中对象迭代与反迭代的技巧总结
2016/09/17 Python
Python实现批量读取图片并存入mongodb数据库的方法示例
2018/04/02 Python
Python(Django)项目与Apache的管理交互的方法
2018/05/16 Python
Appium Python自动化测试之环境搭建的步骤
2019/01/23 Python
python openCV实现摄像头获取人脸图片
2020/08/20 Python
把Anaconda中的环境导入到Pycharm里面的方法步骤
2020/10/30 Python
Whittard官方海外旗舰店:英国百年茶叶品牌
2018/02/22 全球购物
微博营销计划书
2014/01/10 职场文书
2014乡镇“三八”国际劳动妇女节活动总结
2014/03/01 职场文书
员工试用期考核自我鉴定
2014/04/13 职场文书
给市场的环保建议书
2014/05/14 职场文书
身边的榜样活动方案
2014/08/20 职场文书
领导班子个人查摆问题对照检查材料
2014/10/02 职场文书
中学生旷课检讨书模板
2014/10/08 职场文书
单位作风建设剖析材料
2014/10/11 职场文书
2014年教研组工作总结
2014/11/26 职场文书
欢迎词怎么写
2015/01/23 职场文书
关于上班时间调整的通知
2015/04/23 职场文书
党员发展大会主持词
2015/07/03 职场文书
详细总结Python常见的安全问题
2021/05/21 Python
MYSQL如何查看操作日志详解
2022/05/30 MySQL
小程序自定义轮播图圆点组件
2022/06/25 Javascript
微软Win11 全新照片应用面向 Dev预览版推出 新版本上手体验图集
2022/09/23 数码科技