限制上传文件大小和格式的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 相关文章推荐
jquery学习笔记二 实现可编辑的表格
Apr 09 Javascript
Json字符串转换为JS对象的高效方法实例
May 01 Javascript
对JavaScript客户端应用编程的一些建议
Jun 24 Javascript
简述Jquery与DOM对象
Jul 10 Javascript
jQuery实现带滑动条的菜单效果代码
Aug 26 Javascript
Angular发布1.5正式版,专注于向Angular 2的过渡
Feb 18 Javascript
jQuery 出现Cannot read property ‘msie’ of undefined错误的解决方法
Nov 23 Javascript
Jquery Easyui验证组件ValidateBox使用详解(20)
Dec 18 Javascript
Vue.js学习之计算属性
Jan 22 Javascript
详解在vue-cli项目中安装node-sass
Jun 21 Javascript
vue项目设置scrollTop不起作用(总结)
Dec 21 Javascript
javascript的setTimeout()使用方法总结
Nov 20 Javascript
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
PHP 获取目录下的图片并随机显示的代码
2009/12/28 PHP
解析php file_exists无效的解决办法
2013/06/26 PHP
laravel学习教程之关联模型
2016/07/30 PHP
零基础学JavaScript最新动画教程+iso光盘下载
2008/01/22 Javascript
学习ExtJS form布局
2009/10/08 Javascript
使用jquery与图片美化checkbox和radio控件的代码(打包下载)
2010/11/11 Javascript
Jquery为a标签的href赋值实现代码
2013/05/03 Javascript
JavaScript 判断用户输入的邮箱及手机格式是否正确
2013/12/08 Javascript
jquery mobile动态添加元素之后不能正确渲染解决方法说明
2014/03/05 Javascript
jquery阻止后续事件只执行第一个事件
2014/07/24 Javascript
javascript实现滚动效果的数字时钟实例
2016/07/21 Javascript
jquery中绑定事件的异同
2017/02/28 Javascript
vue2笔记 — vue-router路由懒加载的实现
2017/03/03 Javascript
vue.js与后台数据交互的实例讲解
2018/08/08 Javascript
Vue中使用方法、计算属性或观察者的方法实例详解
2018/10/31 Javascript
JS函数动态传递参数的方法分析【基于arguments对象】
2019/06/05 Javascript
vue实现简单学生信息管理
2020/05/30 Javascript
vue基础知识--axios合并请求和slot
2020/06/04 Javascript
[02:09:59]火猫TV国士无双dota2 6.82版本详解(下)
2014/09/29 DOTA
python网络编程之TCP通信实例和socketserver框架使用例子
2014/04/25 Python
Python数据结构之哈夫曼树定义与使用方法示例
2018/04/22 Python
Python实现爬虫爬取NBA数据功能示例
2018/05/28 Python
Python实现爬虫从网络上下载文档的实例代码
2018/06/13 Python
Python基于最小二乘法实现曲线拟合示例
2018/06/14 Python
python统计字母、空格、数字等字符个数的实例
2018/06/29 Python
django中forms组件的使用与注意
2019/07/08 Python
Python3 A*寻路算法实现方式
2019/12/24 Python
HttpServlet类中的主要方法都有哪些?各自的作用是什么?
2014/03/16 面试题
详解如何解决使用JSON.stringify时遇到的循环引用问题
2021/03/23 Javascript
迟到检讨书5000字
2014/01/31 职场文书
教师四风对照检查材料思想汇报
2014/09/17 职场文书
2014个人四风对照检查材料思想汇报
2014/09/18 职场文书
2014年销售内勤工作总结
2014/12/01 职场文书
企业财务人员岗位职责
2015/04/14 职场文书
2016大学生入党积极分子心得体会
2016/01/06 职场文书
css3实现背景图片颜色修改的多种方式
2021/04/13 HTML / CSS