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 相关文章推荐
Html中JS脚本执行顺序简单举例说明
Jun 19 Javascript
asp.net下使用jquery 的ajax+WebService+json 实现无刷新取后台值的实现代码
Sep 19 Javascript
简单实用的全选反选按钮例子
Oct 18 Javascript
javascript的document.referrer浏览器支持、失效情况总结
Jul 18 Javascript
jquery实现红色竖向多级向右展开的导航菜单效果
Aug 31 Javascript
jQuery实现加入收藏夹功能(主流浏览器兼职)
Dec 24 Javascript
HTML5+jQuery实现搜索智能匹配功能
Mar 24 jQuery
使用vue实现grid-layout功能实例代码
Jan 05 Javascript
p5.js实现简单货车运动动画
Oct 23 Javascript
jquery 插件重新绑定的处理方法分析
Nov 23 jQuery
js找出5个数中最大的一个数和倒数第二大的数实现方法示例小结
Mar 04 Javascript
微信小程序用户授权最佳实践指南
May 08 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获取当前页面完整URL的实现代码
2013/06/10 PHP
php对关联数组循环遍历的实现方法
2015/03/13 PHP
10个php函数实用却不常见
2015/10/13 PHP
PHP四种排序算法实现及效率分析【冒泡排序,插入排序,选择排序和快速排序】
2018/04/27 PHP
JavaScript中获取未知对象属性的代码
2011/04/27 Javascript
深入解析AngularJS框架中$scope的作用与生命周期
2016/03/05 Javascript
jQuery+Ajax实现限制查询间隔的方法
2016/06/07 Javascript
JS HTML5实现拖拽移动列表效果
2020/08/27 Javascript
JavaScript中获取时间的函数集
2016/08/16 Javascript
Angular学习笔记之angular的$filter服务浅析
2016/11/12 Javascript
使用smartupload组件实现jsp+jdbc上传下载文件实例解析
2017/01/05 Javascript
windows下vue-cli导入bootstrap样式
2017/04/25 Javascript
微信小程序 action-sheet 反馈上拉菜单简单实例
2017/05/11 Javascript
使用 jQuery 实现表单验证功能
2017/07/05 jQuery
JS实现二维数组横纵列转置的方法
2018/04/17 Javascript
使用pm2自动化部署node项目的方法步骤
2019/01/28 Javascript
Vue 理解之白话 getter/setter详解
2019/04/16 Javascript
详解vue项目中调用百度地图API使用方法
2019/04/25 Javascript
python用reduce和map把字符串转为数字的方法
2016/12/19 Python
书单|人生苦短,你还不用python!
2017/12/29 Python
PyQt5每天必学之单行文本框
2018/04/19 Python
Python单元测试unittest的具体使用示例
2018/12/17 Python
Python图像处理之图像的缩放、旋转与翻转实现方法示例
2019/01/04 Python
python  文件的基本操作 菜中菜功能的实例代码
2019/07/17 Python
TensorFlow MNIST手写数据集的实现方法
2020/02/05 Python
浅谈selenium如何应对网页内容需要鼠标滚动加载的问题
2020/03/14 Python
python根据完整路径获得盘名/路径名/文件名/文件扩展名的方法
2020/04/22 Python
openCV提取图像中的矩形区域
2020/07/21 Python
Python QT组件库qtwidgets的使用
2020/11/02 Python
CSS3 按钮边框动画的实现
2020/11/12 HTML / CSS
全球速卖通西班牙站:AliExpress西班牙
2017/10/30 全球购物
慰问信范文
2015/02/14 职场文书
二十年同学聚会感言
2015/07/30 职场文书
如何用JavaScript检测当前浏览器是无头浏览器
2021/04/27 Javascript
浅谈Go语言多态的实现与interface使用
2021/06/16 Golang
python中的random模块和相关函数详解
2022/04/22 Python