限制上传文件大小和格式的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 + Ajax调用webService实例代码(asp.net)
Aug 27 Javascript
非阻塞动态加载javascript广告实现代码
Nov 17 Javascript
js加强的经典分页实例
Mar 15 Javascript
setInterval()和setTimeout()的用法和区别示例介绍
Nov 17 Javascript
js/jquery解析json和数组格式的方法详解
Jan 09 Javascript
用json方式实现在 js 中建立一个map
May 02 Javascript
jQuery源码解读之addClass()方法分析
Feb 20 Javascript
react-router实现按需加载
May 09 Javascript
Vue组件教程之Toast(Vue.extend 方式)详解
Jan 27 Javascript
小程序如何定位所在城市及发起周边搜索
Feb 11 Javascript
如何使用vue slot创建一个模态框的实例代码
May 24 Javascript
三种方式清除vue路由跳转router-link的历史记录
Apr 10 Vue.js
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
基于mysql的论坛(6)
2006/10/09 PHP
php+ajax做仿百度搜索下拉自动提示框(有实例)
2012/08/21 PHP
如何用php获取文件名后缀
2013/06/09 PHP
thinkPHP5框架分页样式类完整示例
2018/09/01 PHP
js checkbox(复选框) 使用集锦
2009/04/28 Javascript
初窥JQuery(一)jquery选择符 必备知识点
2010/11/25 Javascript
JQuery slideshow的一个小问题(如何发现及解决过程)
2013/02/06 Javascript
jQuery中json对象的复制方式介绍(数组及对象)
2013/06/08 Javascript
JS 弹出层 定位至屏幕居中示例
2014/05/21 Javascript
nodejs中转换URL字符串与查询字符串详解
2014/11/26 NodeJs
jQuery提示插件alertify使用指南
2015/04/21 Javascript
实例解析Array和String方法
2016/12/14 Javascript
Vue.js实现价格计算器功能
2020/03/30 Javascript
安装Node.js并启动本地服务的操作教程
2018/05/12 Javascript
JavaScript刷新页面的几种方法总结
2019/03/28 Javascript
jQuery弹框插件使用方法详解
2020/05/26 jQuery
[01:19:46]DOTA2-DPC中国联赛 正赛 SAG vs DLG BO3 第一场 2月28日
2021/03/11 DOTA
Python 12306抢火车票脚本 Python京东抢手机脚本
2018/02/06 Python
python中ASCII码和字符的转换方法
2018/07/09 Python
Python GUI编程完整示例
2019/04/04 Python
Python面向对象程序设计之私有属性及私有方法示例
2019/04/08 Python
Python scipy的二维图像卷积运算与图像模糊处理操作示例
2019/09/06 Python
Python包,__init__.py功能与用法分析
2020/01/07 Python
Python生成器实现简单&quot;生产者消费者&quot;模型代码实例
2020/03/27 Python
使用Python获取爱奇艺电视剧弹幕数据的示例代码
2021/01/12 Python
如何用Matlab和Python读取Netcdf文件
2021/02/19 Python
Linux上比较文件的命令都有哪些
2013/09/28 面试题
社区道德讲堂实施方案
2014/03/21 职场文书
市场营销战略计划书
2014/05/06 职场文书
拾金不昧锦旗标语
2014/06/27 职场文书
国际会计专业求职信
2014/08/04 职场文书
2014年六五普法工作总结
2014/11/25 职场文书
2014年妇幼保健工作总结
2014/12/08 职场文书
2015年幼儿园卫生保健工作总结
2015/05/12 职场文书
Java Dubbo框架知识点梳理
2021/06/26 Java/Android
DQL数据查询语句使用示例
2022/12/24 MySQL