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 相关文章推荐
表单填写时用回车代替TAB的实现方法
Oct 09 Javascript
测试JavaScript字符串处理性能的代码
Dec 07 Javascript
JS DOM 操作实现代码
Aug 01 Javascript
director.js实现前端路由使用实例
Feb 03 Javascript
微信小程序日历组件calendar详解及实例
Jun 08 Javascript
实现div内部滚动条滚动到底部和顶部的代码
Nov 15 Javascript
Vue.JS项目中5个经典Vuex插件
Nov 28 Javascript
jQuery实现页码跳转式动态数据分页
Dec 31 jQuery
Vue.js 十五分钟入门图文教程
Sep 12 Javascript
VsCode与Node.js知识点详解
Sep 05 Javascript
createObjectURL方法实现本地图片预览
Sep 30 Javascript
JavaScript位置参数实现原理及过程解析
Sep 14 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
Flash空降上海 化身大魔王接受挑战
2020/03/02 星际争霸
php SQL之where语句生成器
2009/03/24 PHP
php的$_FILES的临时储存文件与回收机制实测过程
2013/07/12 PHP
php实现页面纯静态的实例代码
2017/06/21 PHP
PHP 进程池与轮询调度算法实现多任务的示例代码
2019/11/26 PHP
Cookie 小记
2010/04/01 Javascript
js弹出层(jQuery插件形式附带reLoad功能)
2013/04/12 Javascript
JavaScript中为什么null==0为false而null大于=0为true(个人研究)
2013/09/16 Javascript
Node.js中child_process实现多进程
2015/02/03 Javascript
JavaScript自定义数组排序方法
2015/02/12 Javascript
JavaScript文档碎片操作实例分析
2015/12/12 Javascript
使用snowfall.jquery.js实现爱心满屏飞的效果
2017/01/05 Javascript
jQuery Ajax实现跨域请求
2017/01/21 Javascript
vue.js中created方法作用
2018/03/30 Javascript
用vue快速开发app的脚手架工具
2018/06/11 Javascript
vue实现表单录入小案例
2019/09/27 Javascript
Vue+webpack实现懒加载过程解析
2020/02/17 Javascript
JavaScript Event Loop相关原理解析
2020/06/10 Javascript
解决echarts vue数据更新,视图不更新问题(echarts嵌在vue弹框中)
2020/07/20 Javascript
VUE 实现element upload上传图片到阿里云
2020/08/12 Javascript
js实现删除json中指定的元素
2020/09/22 Javascript
python 2.6.6升级到python 2.7.x版本的方法
2016/10/09 Python
django模板语法学习之include示例详解
2017/12/17 Python
Python爬虫获取整个站点中的所有外部链接代码示例
2017/12/26 Python
对Python生成汉字字库文字,以及转换为文字图片的实例详解
2019/01/29 Python
Python Opencv实现图像轮廓识别功能
2020/03/23 Python
python标记语句块使用方法总结
2019/08/05 Python
印尼穆斯林时尚购物网站:Hijabenka
2016/12/10 全球购物
C++的几个面试题附答案
2016/08/03 面试题
工程造价与财务管理专业应届生求职信
2013/10/06 职场文书
年度考核自我鉴定
2013/11/09 职场文书
医院实习介绍信
2014/01/12 职场文书
规范化管理年活动总结
2014/08/29 职场文书
质量保证书格式
2015/02/27 职场文书
请假条应该怎么写?
2019/06/24 职场文书
使用Apache Camel表达REST服务的方法
2022/06/10 Servers