限制上传文件大小和格式的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创建Silverlight Plugin以及自定义nonSilverlight和lowSilverlight样式
Jun 28 Javascript
禁止选中文字兼容IE、Chrome、FF等
Sep 04 Javascript
Json序列化和反序列化方法解析
Dec 19 Javascript
Javascript 拖拽雏形中的一些问题(逐行分析代码,让你轻松了拖拽的原理)
Jan 23 Javascript
JS实现类似百叶窗下拉菜单效果
Dec 30 Javascript
简单的JS控制button颜色随点击更改的实现方法
Apr 17 Javascript
Angular+Node生成随机数的方法
Jun 16 Javascript
解决mpvue + vuex 开发微信小程序vuex辅助函数mapState、mapGetters不可用问题
Aug 03 Javascript
layUI实现三级导航菜单效果
Jul 26 Javascript
VUE:vuex 用户登录信息的数据写入与获取方式
Nov 11 Javascript
详解webpack-dev-middleware 源码解读
Mar 23 Javascript
Ajax请求超时与网络异常处理图文详解
May 23 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(3) php 函数
2010/02/15 PHP
PHP屏蔽蜘蛛访问代码及常用搜索引擎的HTTP_USER_AGENT
2013/03/06 PHP
Function eregi is deprecated (解决方法)
2013/06/21 PHP
PHP过滤★等特殊符号的正则
2014/01/27 PHP
PHP使用ob_start生成html页面的方法
2014/11/07 PHP
PHP程序员不应该忽略的3点
2015/10/09 PHP
Zend Framework教程之资源(Resources)用法实例详解
2016/03/14 PHP
PHP排序算法之堆排序(Heap Sort)实例详解
2018/04/21 PHP
PHP 枚举类型的管理与设计知识点总结
2020/02/13 PHP
Laravel5.3+框架定义API路径取消CSRF保护方法详解
2020/04/06 PHP
javascript firefox不显示本地预览图片问题的解决方法
2008/11/12 Javascript
js中将字符串转换成json的三种方式
2011/01/12 Javascript
JavaScript中的this关键字介绍与使用实例
2013/06/21 Javascript
jQuery toggleClass应用实例(附效果图)
2014/04/06 Javascript
javascript实现鼠标拖动改变层大小的方法
2015/04/30 Javascript
AngularJS入门教程之路由机制ngRoute实例分析
2016/12/13 Javascript
微信小程序实现登录遮罩效果
2018/11/01 Javascript
vue elementui 实现搜索栏公共组件封装的实例代码
2020/01/20 Javascript
解决vue项目本地启动时无法携带cookie的问题
2021/02/06 Vue.js
python通过wxPython打开一个音频文件并播放的方法
2015/03/25 Python
python中enumerate函数用法实例分析
2015/05/20 Python
python实现requests发送/上传多个文件的示例
2018/06/04 Python
python 执行终端/控制台命令的例子
2019/07/12 Python
Django Form 实时从数据库中获取数据的操作方法
2019/07/25 Python
pytorch 实现tensor与numpy数组转换
2019/12/27 Python
Booking.com荷兰:全球酒店网上预订
2017/08/22 全球购物
《荷花》教学反思
2014/04/16 职场文书
个性婚礼策划方案
2014/05/17 职场文书
公益广告标语
2014/06/19 职场文书
简爱电影观后感
2015/06/10 职场文书
电工生产实习心得体会
2016/01/22 职场文书
人民币使用说明书
2019/04/17 职场文书
Python函数式编程中itertools模块详解
2021/09/15 Python
Ajax异步刷新功能及简单案例
2021/11/20 Javascript
Python机器学习应用之工业蒸汽数据分析篇详解
2022/01/18 Python
vscode远程免密登入Linux服务器的配置方法
2022/06/28 Servers