• Jquery自定义图片上传插件


    1 概述

      编写后台网站程序大多数用到文件上传,可是传统的文件上传控件不是外观不够优雅,就是性能不太好看,翻阅众多文件上传控件的文章,发现可以这样去定义一个文件上传控件,实现的文件上传的效果图如下:

    2、该图片上传插件实现功能如下:

      1>能够异步上传,上传成功之后,服务器返回响应结果;能够定义上传前和上传后自定义处理方式;

      2>能够实现文件格式判断,过滤非图片文件;

      3>服务端能够过滤重复上传的图片;

    3、页面代码分析:

      1>、Jquery图片上传插件代码如下:

    // 选中文件, 提交表单(开始上传)
    (function ($) {
        var iframe;
        var form;
        var opeartData=null;
    
        $.uploadDefault = {
            url: '',
            fileName: 'filedata',
            dataType: 'json',
            imgshow: '',
            onSend: function(){ return true; },
            onSubmit: function () { return true; },
            onComplate: function () { return true; }
        };
    
        $.UpLoadForm = {
    
            //图片格式验证
            $PicChange: function (obj)
            {
                if (opeartData.imgshow != null && opeartData.imgshow != '')
                {
                    $("#" + opeartData.imgshow).val($(obj).val());
                }            
            },
    
            //判断pic格式是否正确
            $IsPicCheck: function (fileName)
            {
                if (fileName != null && fileName != "") {
                    //lastIndexOf如果没有搜索到则返回为-1
                    if (fileName.lastIndexOf(".") != -1) {
                        var fileType = (fileName.substring(fileName.lastIndexOf(".") + 1, fileName.length)).toLowerCase();
                        var suppotFile = new Array();
                        suppotFile[0] = "jpg";
                        suppotFile[1] = "gif";
                        suppotFile[2] = "bmp";
                        suppotFile[3] = "png";
                        suppotFile[4] = "jpeg";
                        for (var i = 0; i < suppotFile.length; i++) {
                            if (suppotFile[i] == fileType) {
                                return true;
                            } else {
                                continue;
                            }
                        }
                        return false;
                    } else {
                        return false;
                    }
                }
            },
    
            $ImgUpLoad: function () {
                if (opeartData == null)
                {
                    //没有选择图片或者图片已经上传
                    return;
                }
                opeartData = $.extend($.uploadDefault, opeartData);
                var canSend = opeartData.onSend();
                if (!canSend) {
                    return;
                }
                if (!opeartData.onSubmit())//图片验证
                {
                    return;
                }
                form.submit();
                iframe.load(function() {
                    var contents = $(this).contents().get(0);
                    var data = $(contents).find('body').text();
                    if ('json' == opeartData.dataType) {
                        data = window.eval('(' + data + ')');
                    }
                    opeartData.onComplate(data);
                    setTimeout(function() {
                        iframe.remove();
                        form.remove();
                        opeartData = null;
                    }, 5000);
                });
            },
    
            $OpenFIle: function (options) {
                opeartData = $.extend($.uploadDefault, options);
                if (opeartData.url == '') {
                    return;
                }
                var frameName = 'upload_frame_0';
                var formName = 'upload_form_0';
                if ($("#" + formName).length > 0) {
                    iframe = $("#" + frameName);
                    form = $("#" + formName);                
                }
                else {
                    iframe = $('<iframe style="position:absolute;top:-9999px" id="' + frameName + '" />').attr('name', frameName);
                    form = $('<form method="post" style="display:none;" id="' + formName + '" enctype="multipart/form-data" />').attr('name', 'form_' + frameName);
                    form.attr("target", frameName).attr('action', opeartData.url);
                    // form中增加数据域
                    var formHtml = '<input type="file" name="' + opeartData.fileName + '" onchange="$.UpLoadForm.$PicChange(this)")"/>';
                    form.append(formHtml);
                    iframe.appendTo("body");
                    form.appendTo("body");
                }
                var fileInput = $('input[type=file][name=' + opeartData.fileName + ']', form);
                fileInput.click();
            }
        }
    })(jQuery);

      2>前台页面调用代码如下,Jquery插件,别忘记引入Jquery对应js:

    <script type="text/javascript">
            $(function () {
                $("#imagetx").bind("click", function () {
                    $.UpLoadForm.$OpenFIle({
                        // 上传地址
                        url: '../upload/UploadImg',
                        // 文件域名字
                        fileName: 'upimage',
                        // 其他表单数据
                        imgshow: 'imagetx',
                        // 上传完成后, 返回json, text
                        dataType: 'json',
                        // 上传之前回调,return true表示可继续上传
                        onSend: function () {
                            $.ShowLoadDialog();
                            return true;
                        },
                        onSubmit: function () {
                            var picpath = $("#imagetx").val();
                            console.log(picpath);
                            if (!$.UpLoadForm.$IsPicCheck(picpath))                        
                            {
                                $.ShowLoadDialogClose();
                                $TipDialog("图片上传", "请上传jpg、gif、bmp、png、jpeg格式的图片!");
                                return false;
                            }                        
                            return true;
                        },                    
                        // 上传之后回调
                        onComplate: function (data) {
                            $.ShowLoadDialogClose();
                            if (data != null)
                            {
                                console.log(data)
                                if (data.errorcode == "200") {
                                    $("#showpic").attr("src", data.picurl);
                                }
                                else {
                                    $TipDialog("图片上传", "图片上传失败");
                                }
                            }
                        }
                    });
                });
                $("#btnupload").bind("click", function () {
                    $.UpLoadForm.$ImgUpLoad();
                })
    
            });
        </script>

      3>后台服务器验证:

            [HttpPost]
            public JsonResult UploadImg(HttpPostedFileBase upimage)
            {
                string pic = "", error = "001",pcode="";
                try
                {
                    if (upimage != null)
                    { 
                        string fileName = DateTime.Now.ToString("yyyyMMdd") + System.IO.Path.GetFileName(upimage.FileName);
                        string[] pictext = { ".jpg",".gif",".bmp",".png",".jpeg" };
                        string extenname= System.IO.Path.GetExtension(fileName);
                        if (pictext.Contains(extenname))
                        {
                            string filePhysicalPath = Server.MapPath("~/Upload/Images/" + fileName);                                      
                                upimage.SaveAs(filePhysicalPath);
                                pic = "/Upload/Images/" + fileName;                            
                            }
                            else
                            {                        
                                error = "200";
                                pic =pic ;
                            }
                        }                                        
                    }               
                }
                catch (Exception ex)
                {
                    error = ex.Message;
                }
                return Json(new
                {                
                    errorcode = error,
                    picurl = pic,
                    piccode = pcode
                });
            }

    图片上传也就完成,展示的效果也如上面所示;

  • 相关阅读:
    UESTC--1727
    css3制作左右拉伸动画菜单
    Mysql主从数据库(master/slave),实现读写分离
    阿里云Centos7.6上面部署基于redis的分布式爬虫scrapy-redis将任务队列push进redis
    利用基于Go Lang的Hugo配合nginx来打造属于自己的纯静态博客系统
    Centos7.6上利用docker搭建Jenkins来自动化部署Django项目
    使用基于Vue.js和Hbuilder的混合模式移动开发打造属于自己的移动app
    Centos7.6上部署Supervisor来监控和操作各类服务
    Centos上配置nginx+uwsgi+负载均衡配置
    Websocket---认识篇
  • 原文地址:https://www.cnblogs.com/xibei666/p/5182214.html
Copyright © 2020-2023  润新知