限制上传文件大小和格式的jQuery插件实例


Posted in Javascript onJanuary 24, 2015

本文实例讲述了限制上传文件大小和格式的jQuery插件。分享给大家供大家参考。具体分析如下:

在客户端上传文件,通常需要限制文件的尺寸和格式,最常用的做法是使用某款插件,一些成熟的插件的确界面好看,且功能强大,但美中不足的是:有时候会碰到浏览器兼容问题。本篇就来写一个"原生态"的jQuery插件,使之能限制上传文件的大小和格式。

首先,写一个名称为checkFileTypeAndSize.js的插件。通过判断当前文件的后缀名是否被包含在预先设置所允许的后缀名数组中,来限制文件格式;通过判断当前文件在IE以及其它浏览器下的尺寸是否大于预先设置所允许的最大文件尺寸,来限制文件大小;并提供格式错误、超过限制大小以及符合条件的回调函数。

(function ($) {

    $.fn.checkFileTypeAndSize = function (options) {

        //默认设置

        var defaults = {

            allowedExtensions: [],

            maxSize: 1024, //单位是KB,默认最大文件尺寸1MB=1024KB

            success: function () { },

            extensionerror: function () { },

            sizeerror: function () { }

        };

        //合并设置

        options = $.extend(defaults, options);

        //遍历元素

        return this.each(function () {

            $(this).on('change', function () {

                //获取文件路径

                var filePath = $(this).val();

                //小写字母的文件路径

                var fileLowerPath = filePath.toLowerCase();

                //获取文件的后缀名

                var extension = fileLowerPath.substring(fileLowerPath.lastIndexOf('.') + 1);

                //判断后缀名是否包含在预先设置的、所允许的后缀名数组中

                if ($.inArray(extension, options.allowedExtensions) == -1) {

                    options.extensionerror();

                    $(this).focus();

                } else {

                    try {

                        var size = 0;

                        if ($.browser.msie) {//ie旧版浏览器

                            var fileMgr = new ActiveXObject("Scripting.FileSystemObject");

                            var fileObj = fileMgr.getFile(filePath);

                            size = fileObj.size; //byte

                            size = size / 1024;//kb

                            //size = size / 1024;//mb

                        } else {//其它浏览器

                            size = $(this)[0].files[0].size;//byte

                            size = size / 1024;//kb

                            //size = size / 1024;//mb

                        }

                        if (size > options.maxSize) {

                            options.sizeerror();

                        } else {

                            options.success();

                        }

                    } catch (e) {

                        alert("错误:" + e);

                    }

                }

            });

        });

    };

})(jQuery);

在客户端的调用变得非常简单。

<input type="file" name="f" id="f"/>

@section scripts

{

    <script src="~/Scripts/checkFileTypeAndSize.js"></script>

    <script type="text/javascript">

        $(function() {

            $('#f').checkFileTypeAndSize({

                allowedExtensions: ['jpg'],

                maxSize: 10,

                success: function() {

                    alert('ok');

                },

                extensionerror: function() {

                    alert('允许的格式为:jpg');

                    return;

                },

                sizeerror: function() {

                    alert('最大尺寸10kb');

                    return;

                }

            });

        });

    </script>

}

希望本文所述对大家的jQuery程序设计有所帮助。

Javascript 相关文章推荐
JavaScript在IE和Firefox浏览器下的7个差异兼容写法小结
Jun 18 Javascript
js+css在交互上的应用
Jul 18 Javascript
用box固定长宽实现图片自动轮播js代码
Jun 09 Javascript
JS控制弹出悬浮窗口(一览画面)的实例代码
May 30 Javascript
JavaScript基于原型链的继承
Jun 22 Javascript
很棒的js Tab选项卡切换效果
Aug 30 Javascript
JS获取数组中出现次数最多及第二多元素的方法
Oct 27 Javascript
深入浅析vue组件间事件传递
Dec 29 Javascript
在Vue中使用this.$store或者是$route一直报错的解决
Nov 08 Javascript
vue 中几种传值方法(3种)
Nov 12 Javascript
Vue 微信端扫描二维码苹果端却只能保存图片问题(解决方法)
Jan 19 Javascript
jquery实现垂直手风琴菜单
Mar 04 jQuery
jQuery将所有被选中的checkbox某个属性值连接成字符串的方法
Jan 24 #Javascript
使用jQuery实现input数值增量和减量的方法
Jan 24 #Javascript
Javascript 拖拽雏形中的一些问题(逐行分析代码,让你轻松了拖拽的原理)
Jan 23 #Javascript
Javascript 拖拽雏形(逐行分析代码,让你轻松了拖拽的原理)
Jan 23 #Javascript
Javascript 拖拽的一些简单的应用(逐行分析代码,让你轻松了拖拽的原理)
Jan 23 #Javascript
Javascript 完美运动框架(逐行分析代码,让你轻松了运动的原理)
Jan 23 #Javascript
Javascript 拖拽的一些高级的应用(逐行分析代码,让你轻松了拖拽的原理)
Jan 23 #Javascript
You might like
探讨:如何通过stats命令分析Memcached的内部状态
2013/06/14 PHP
destoon实现资讯信息前面调用它所属分类的方法
2014/07/15 PHP
php导出生成word的方法
2015/12/25 PHP
laravel5.6 框架操作数据 Eloquent ORM用法示例
2020/01/26 PHP
js中 关于undefined和null的区别介绍
2013/04/16 Javascript
setTimeout函数兼容各主流浏览器运行执行效果实例
2013/06/13 Javascript
JS二维数组的定义说明
2014/03/03 Javascript
JS+CSS实现感应鼠标渐变显示DIV层的方法
2015/02/20 Javascript
js给网页加上背景音乐及选择音效的方法
2015/03/03 Javascript
情人节单身的我是如何在敲完代码之后收到12束玫瑰的(javascript)
2015/08/21 Javascript
浅谈JavaScript中小数和大整数的精度丢失
2016/05/31 Javascript
jQuery中Ajax全局事件引用方式及各个事件(全局/局部)执行顺序
2016/06/02 Javascript
javascript作用域、作用域链(菜鸟必看)
2016/06/16 Javascript
JS当前页面登录注册框,固定DIV,底层阴影的实例代码
2016/09/29 Javascript
VUE实现表单元素双向绑定(总结)
2017/08/08 Javascript
bootstrap fileinput实现文件上传功能
2017/08/23 Javascript
JS使用canvas中的measureText方法测量字体宽度示例
2019/02/02 Javascript
layui实现数据表格自定义数据项
2019/10/26 Javascript
vue.js实现简单购物车功能
2020/05/30 Javascript
vue.js 解决v-model让select默认选中不生效的问题
2020/07/28 Javascript
攻击者是如何将PHP Phar包伪装成图像以绕过文件类型检测的(推荐)
2018/10/11 Python
Python Django给admin添加Action的方法实例详解
2019/04/29 Python
django-rest-swagger对API接口注释的方法
2019/08/29 Python
python在OpenCV里实现投影变换效果
2019/08/30 Python
Python socket服务常用操作代码实例
2020/06/22 Python
浅析Python的命名空间与作用域
2020/11/25 Python
建筑专业自荐信
2013/10/18 职场文书
公司领导推荐信
2013/11/12 职场文书
十佳护士先进事迹
2014/05/08 职场文书
2014年庆祝国庆65周年演讲稿
2014/09/21 职场文书
2014年行政部工作总结
2014/11/19 职场文书
毕业生对母校寄语
2015/02/26 职场文书
青年志愿者服务活动总结
2015/05/06 职场文书
正规欠条模板
2015/07/03 职场文书
学校标语口号大全
2015/12/26 职场文书
Pytorch可视化的几种实现方法
2021/06/10 Python