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 相关文章推荐
利用jQuery的deferred对象实现异步按顺序加载JS文件
Mar 17 Javascript
javascript与jquery中跳出循环的区别总结
Nov 04 Javascript
Javascript前端UI框架Kit使用指南之Kitjs简介
Nov 28 Javascript
js与jquery实时监听输入框值的oninput与onpropertychange方法
Feb 05 Javascript
实例讲解JavaScript中instanceof运算符的用法
Jun 08 Javascript
基于jQuery的表单填充实例
Aug 22 jQuery
json2.js 入门教程之使用方法与实例分析
Sep 14 Javascript
jQuery实现点击DIV同时点击CheckBox,并为DIV上背景色的实例
Dec 18 jQuery
JS实现移动端触屏拖拽功能
Jul 31 Javascript
webpack4 SCSS提取和懒加载的示例
Sep 03 Javascript
js瀑布流布局的实现
Jun 28 Javascript
javascript实现固定侧边栏
Feb 09 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
Laravel 4 初级教程之Pages、表单验证
2014/10/30 PHP
PHP生成唯一订单号的方法汇总
2015/04/16 PHP
cloudgamer出品ImageZoom 图片放大效果
2010/04/01 Javascript
jquery的冒泡事件的阻止与允许(三种实现方法)
2013/02/01 Javascript
jquery使用ColorBox弹出图片组浏览层实例演示
2013/03/14 Javascript
javascript闭包入门示例
2014/04/30 Javascript
用简洁的jQuery方法toggleClass实现隔行换色
2014/10/22 Javascript
基于vue+ bootstrap实现图片上传图片展示功能
2017/05/17 Javascript
Vue.js通用应用框架-Nuxt.js的上手教程
2017/12/25 Javascript
vue之将echart封装为组件
2018/06/02 Javascript
详解基于Vue cli生成的Vue项目的webpack4升级
2018/06/19 Javascript
微信小程序实现默认第一个选中变色效果
2018/07/17 Javascript
vue车牌号校验和银行校验实战
2019/01/23 Javascript
JS实现提示效果弹出及延迟隐藏的功能
2019/08/26 Javascript
浅谈layui框架自带分页和表格重载的接口解析问题
2019/09/11 Javascript
Python中的多重装饰器
2015/04/11 Python
探究Python中isalnum()方法的使用
2015/05/18 Python
Python实现对字符串的加密解密方法示例
2017/04/29 Python
《Python学习手册》学习总结
2018/01/17 Python
python学习基础之循环import及import过程
2018/04/22 Python
Python实现对文件进行单词划分并去重排序操作示例
2018/07/10 Python
python获取微信小程序手机号并绑定遇到的坑
2018/11/19 Python
在python中实现将一张图片剪切成四份的方法
2018/12/05 Python
完美解决Python matplotlib绘图时汉字显示不正常的问题
2019/01/29 Python
python binascii 进制转换实例
2019/06/12 Python
Python 支持向量机分类器的实现
2020/01/15 Python
浅谈tensorflow中Dataset图片的批量读取及维度的操作详解
2020/01/20 Python
解决Django Haystack全文检索为空的问题
2020/05/19 Python
给Django Admin添加验证码和多次登录尝试限制的实现
2020/07/26 Python
Python爬取网页信息的示例
2020/09/24 Python
CSS 说明横向进度条最后显示文字的实现代码
2020/11/10 HTML / CSS
励志演讲稿500字
2014/08/21 职场文书
高中学生自我评价范文
2014/09/23 职场文书
单位实习工作证明怎么写
2014/11/02 职场文书
《雷雨》教学反思
2016/02/20 职场文书
oracle设置密码复杂度及设置超时退出的功能
2022/06/28 Oracle