限制上传文件大小和格式的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 相关文章推荐
用JS做的简单的可折叠的两级树形菜单
Sep 21 Javascript
PHP PDO操作总结
Nov 17 Javascript
谈一谈javascript闭包
Jan 28 Javascript
微信JSAPI Ticket接口签名详解
Jun 28 Javascript
vue使用laydate时间插件的方法
Nov 14 Javascript
jquery选择器和属性对象的操作实例分析
Jan 10 jQuery
Javascript ParentNode和ChildNode接口原理解析
Mar 16 Javascript
vue修改Element的el-table样式的4种方法
Sep 17 Javascript
微信小程序基于ColorUI构建皮皮虾短视频去水印组件
Nov 04 Javascript
使用Mock.js生成前端测试数据
Dec 13 Javascript
vue+element ui实现锚点定位
Jun 29 Vue.js
解决vue自定义组件@click点击失效问题
Apr 30 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
phpMyAdmin 链接表的附加功能尚未激活的问题
2010/08/01 PHP
解析CI即CodeIgniter框架在Nginx下的重写规则
2013/06/03 PHP
ThinkPHP视图查询详解
2014/06/30 PHP
php合并数组中相同元素的方法
2014/11/13 PHP
node.js中的fs.exists方法使用说明
2014/12/17 Javascript
Java File类的常用方法总结
2015/03/18 Javascript
深入讲解AngularJS中的自定义指令的使用
2015/06/18 Javascript
JS常用字符串方法(推荐)
2021/01/15 Javascript
微信小程序-图片、录音、音频播放、音乐播放、视频、文件代码实例
2016/11/22 Javascript
JS新包管理工具yarn和npm的对比与使用入门
2016/12/09 Javascript
基于jQuery和CSS3实现APPLE TV海报视差效果
2017/06/16 jQuery
浅谈vue2 单页面如何设置网页title
2017/11/08 Javascript
微信小程序实现点击文字页面跳转功能【附源码下载】
2017/12/12 Javascript
jQuery 实现批量提交表格多行数据的方法
2018/08/09 jQuery
Vue中的v-for指令不起效果的解决方法
2018/09/27 Javascript
详谈js的变量提升以及使用方法
2018/10/06 Javascript
通过实例学习React中事件节流防抖
2019/06/17 Javascript
小程序实现左滑删除效果
2019/07/25 Javascript
vue视频播放暂停代码
2019/11/08 Javascript
Javascript作用域和作用域链原理解析
2020/03/03 Javascript
使用Angular9和TypeScript开发RPG游戏的方法
2020/03/25 Javascript
微信小程序中使用 async/await的方法实例分析
2020/05/06 Javascript
使用Python开发windows GUI程序入门实例
2014/10/23 Python
讲解Python中fileno()方法的使用
2015/05/24 Python
Python中字符串的修改及传参详解
2016/11/30 Python
Django 简单实现分页与搜索功能的示例代码
2019/11/07 Python
Python *args和**kwargs用法实例解析
2020/03/02 Python
Python 程序报错崩溃后如何倒回到崩溃的位置(推荐)
2020/06/23 Python
thinkphp5 路由分发原理
2021/03/18 PHP
HTML5之tabindex属性全面解析
2016/07/07 HTML / CSS
英国花园药房: The Garden Pharmacy
2017/12/28 全球购物
领班岗位职责范文
2014/02/06 职场文书
公开服务承诺制度
2014/03/26 职场文书
专题组织生活会方案
2014/06/15 职场文书
2014年检验员工作总结
2014/11/19 职场文书
Flutter Navigator 实现路由传递参数
2022/04/22 Java/Android