当前位置: 首页 > news >正文

FineUploader 学习笔记

FineUploader既是开源的又是收费的,这个没搞懂。

先看效果:

.....

很清爽。

成功和失败很清楚。

从网上找到了这个插件的几个文件:

  1.  fineuploader-4.1.0.min.css
  2.  jquery.fineuploader-4.1.0.min.js
  3.  loading.gif
  4.  processing.gif

后2个是动画效果。

环境:

ASP.NET MVC 4

使用到的文件:

  1.  fineuploader-4.1.0.min.css
  2.  jquery.fineuploader-4.1.0.min.js
  3.  loading.gif
  4.  processing.gif
  5. jquery-1.8.3.min.js

View

@{
    Layout = null;
}

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Index</title>
    <script src="~/Scripts/jquery-1.8.3.min.js" type="text/javascript"></script>
    <script src="~/Scripts/FineUploader/jquery.fineuploader-4.1.0.min.js" type="text/javascript"></script>
    <link href="~/Scripts/FineUploader/fineuploader-4.1.0.min.css" rel="stylesheet" />

    <script type="text/javascript">
        $(document).ready(function () {
            var manualuploader = $('#manual-fine-uploader').fineUploader({
                request: {
                    endpoint: '/FineUploader/Index'
                },
                validation: {
                    //itemLimit: 3,
                    allowedExtensions: ['jpg', 'xlsx','xls', 'txt'],
                    sizeLimit: 10240000 // 10M
                },
                template: "qq-template-manual-noedit",
                autoUpload: false,

                callbacks:
                {
                    //文件开始提交(在浏览窗口中选择的每个文件都会触发该事件)
                    //id:文件在队列中的索引
                    //fileName:文件名称
                    onSubmit: function (id, fileName) {
                        //alert('this is  onSubmit Function,your selected is:' + fileName);
                        //只能上传规定的文件
                        var name = fileName.split('.')[0];//不带后缀名
                        switch (name) {
                            case 'Member':
                                break;
                            case 'Guestbook':
                                break;
                            default:
                                alert('请选择正确的文件上传!');
                                return false;
                                break;                              
                        }
                    },
                    //文件开始上传
                    onUpload: function (id, fileName) {
                        $('#file-' + id).addClass('alert-info')
                                        .html('<img src="../Scripts/FineUploader/loading.gif" alt="" /> alt="Initializing. Please hold."> ' +
                                        'Initializing ' +
                                        '' + fileName + '');
                        $('#progress').show();//显示进度动画
                    },
                    //文件上传失败
                    onError: function (event, id, name, errorReason, xhrOrXdr) {
                        //alert(qq.format("Error on file number {} - {}.  Reason: {}", id, name, errorReason));
                        //$('#message').append('上传文件失败:' + id, '<br/>' + name,+'<br/>'+ errorReason.response + '<br/>');
                    },
                    //文件上传结束
                    onComplete: function (id, fileName, responseJSON) {
                        //alert('This is onComplete function.');
                        //alert("complete name:"+responseJSON.name);//responseJSON就是controller传来的return Json
                        $('#message').append(responseJSON.msg);
                        $('#progress').hide();//隐藏进度动画   
                        //清除已上传队列
                        $('.qq-upload-list').hide();
                        //$('#manual-fine-uploader').fineUploader('reset');//(这个倒是清除了,但是返回的信息$('#message')里只能保留一条。)                       
                    }
                }
            });

            $('#triggerUpload').click(function () {
                manualuploader.fineUploader('uploadStoredFiles');
            });
        });
    </script>
    <script type="text/template" id="qq-template-manual-noedit">
        <div class="qq-uploader-selector qq-uploader">
            <div class="qq-upload-drop-area-selector qq-upload-drop-area" qq-hide-dropzone>
                <span>Drop files here to upload</span>
            </div>
            <div class="qq-upload-button-selector qq-upload-button">
                <div>选择文件</div>
            </div>
            <span class="qq-drop-processing-selector qq-drop-processing">
                <span>Processing dropped files...</span>
                <span class="qq-drop-processing-spinner-selector qq-drop-processing-spinner"></span>
            </span>
            <ul class="qq-upload-list-selector qq-upload-list">
                <li>
                    @*<div class="qq-progress-bar-container-selector">
                        <div class="qq-progress-bar-selector qq-progress-bar"></div>
                    </div>*@
                    <span class="qq-upload-spinner-selector qq-upload-spinner"></span>
                    <span class="qq-upload-file-selector qq-upload-file"></span>
                    <span class="qq-upload-size-selector qq-upload-size"></span>
                    <a class="qq-upload-cancel-selector qq-upload-cancel" href="#">取消</a>
                    <span class="qq-upload-status-text-selector qq-upload-status-text"></span>
                </li>
            </ul>
        </div>
    </script>
    <style type="text/css">
        .btn {
            background-color: #F87436;
            background-image: -moz-linear-gradient(center top, #F88D5A, #E65C47);
            color: #FFFFFF;
            text-shadow: none;
            width: 93px;
            text-align: center;
            cursor: pointer;
            padding: 6px;
        }

        #message {
            margin-top: 1px;
        }

            #message p {
                margin: 0px;
                padding: 9px;
                color: white;
            }
    </style>
</head>
<body>
    <!-- Fine Uploader DOM Element -->
    <div id="manual-fine-uploader"></div>
    <div id="triggerUpload" class="btn btn-primary" style="margin-top: 10px;">
        开始上传
    </div>
    <img id="progress" src="../Scripts/FineUploader/loading.gif" style="display: none;" />
    <div id="message"></div>
</body>
</html>

这里使用了js的模板<script type="text/template" id="qq-template-manual-noedit">

Controller

     public ActionResult Index()
        {
            return View();
        }
        [HttpPost]
        public ActionResult Index(HttpPostedFileBase qqfile)//qqfile是个固定的名称!
        {
            string msg = "";
            if (qqfile != null && qqfile.ContentLength > 0)
            {
                var fileNameWithExtension = Path.GetFileName(qqfile.FileName);
                var fileName = Path.GetFileNameWithoutExtension(qqfile.FileName);
                var path = Path.Combine(Server.MapPath("~/Uploads"), fileNameWithExtension);

                try
                {
                    if (System.IO.File.Exists(path))
                        System.IO.File.Delete(path);
                    qqfile.SaveAs(path);

                    //写入数据库
                    string tbName = "";
                    List<string> columnMapping = null;
                    ImportAndExport.MappingColumn(fileName, out tbName, out columnMapping);
                    ImportAndExport.ImportExcel(path, tbName, columnMapping);
                    System.IO.File.Delete(path);
                    msg = "<p style='background-color:#5DA30C'>写入成功: " + fileName + "</p>";
                }
                catch (Exception ex)
                {
                    System.IO.File.Delete(path);
                    msg = "<p style='background-color:#D60000'>写入失败: " + fileName + " [" + ex.Message + "]</p>";
                    return Json(new { success = false, error = ex.Message, msg = msg }, "text/html");
                }
            }
            //返回的json要有success字段:success = true 上传成功;success=false 上传失败。
            return Json(new { success = true, name = qqfile.FileName, msg = msg }, "text/html");
        }

帮助类:ImportAndExport

 

      ///<summary>导入Excel数据</summary>
        /// <param name="filePath">上传文件路径</param>
        /// <param name="dbTableName">数据库表名</param>
        /// <param name="columnMapping">数据表列映射</param>
        public static void ImportExcel(string filePath, string dbTableName, List<string> columnMapping = null)
        {
            //Create connection string to Excel work book
            string excelConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filePath + ";Extended Properties='Excel 12.0;HDR=YES;IMEX=1';";
            //Create Connection to Excel work book
            using (OleDbConnection excelConnection = new OleDbConnection(excelConnectionString))
            {
                using (OleDbCommand excelCommand = new OleDbCommand("Select * from [Sheet1$]", excelConnection))
                {
                    excelConnection.Open();//打开连接
                    OleDbDataReader excelReader = excelCommand.ExecuteReader();
                    using (DataTable dt = new DataTable())
                    {
                        dt.Load(excelReader);//转为DataTable
                        //已映射的列会传递给批量写入模块,此处只添加不在Excel表格中出现的字段,如一些共有字段或特殊字段。
                        dt.Columns.Add(new DataColumn("CreatedBy", typeof(System.String)));
                        dt.Columns.Add(new DataColumn("CreatedOn", typeof(System.DateTime)));

                        //填充字段值        
                        foreach (DataRow dr in dt.Rows)
                        {
                            dr["CreatedBy"] = "Test";
                            dr["CreatedOn"] = DateTime.Now;
                        }

                        try
                        {//包含增加的字段映射传递给批量写入模块
                            BatchCopy0(dt, dbTableName, columnMapping);
                        }
                        catch (Exception)
                        {
                            excelCommand.Dispose();
                            excelConnection.Close();//关闭excel连接
                            throw;
                        }
                    }
                    excelConnection.Close();//关闭连接
                }
            }
        }
      ///<summary>字段映射</summary>
        ///<param name="fileName">文件名称</param>
        ///<param name="columnMapping">输出映射表</param>
        ///<param name="tbName">数据库表名</param>
        public static void MappingColumn(string fileName, out string tbName, out List<string> columnMapping)
        {
            tbName = "";
            columnMapping = new List<string>();

            if (fileName != null)
            {
                switch (fileName)
                {
                    case "Member":
                        tbName = "Member";
                        columnMapping.Add("姓名,Name");
                        columnMapping.Add("邮箱,Email");
                        columnMapping.Add("生日,Birthday");
                        columnMapping.Add("年龄,Age");
                        break;
                    case "Guestbook":
                        tbName = "Guestbooks";
                        columnMapping.Add("消息,Message");
                        break;
                    default:
                        break;
                }
                ////以下字段未在Excel表格中出现,需传给SqlBulkCopy。
                columnMapping.Add("CreatedBy,CreatedBy");
                columnMapping.Add("CreatedOn,CreatedOn");
            }
        }
        ///<summary>复制数据-不带事务的</summary>
        /// <param name="dt">源数据</param>
        /// <param name="tbName">目标数据表名称</param>
        ///<param name="columnMapping">完整的字段映射</param>
        public static void BatchCopy0(DataTable dt, string tbName, List<string> columnMapping)
        {
            using (SqlBulkCopy sbc = new SqlBulkCopy(sqlConnectionString, SqlBulkCopyOptions.KeepNulls))
            {
                sbc.DestinationTableName = tbName;

                if (columnMapping != null)
                {
                    foreach (var mapping in columnMapping)
                    {
                        var split = mapping.Split(new[] { ',' });
                        sbc.ColumnMappings.Add(split.First(), split.Last());
                    }
                }
                try
                {
                    sbc.WriteToServer(dt);
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }
        }    

 

Excel表格样式:

--End--

 

转载于:https://www.cnblogs.com/ibgo/p/3525405.html

相关文章:

  • 大一下学期,大二上学期,这一年
  • mysql 关于自增字段的一些说明
  • Hyper-v学习(三),虚拟机实时迁移之存储迁移
  • Jquery - 属性选择器
  • typeof instanceof
  • HashMap vs. TreeMap vs. Hashtable vs.LinkedHashMap
  • 第二十二课:磁滞和麦克斯韦方程组
  • JOOMLA中文安装时 数据库发生错误解块办法
  • haproxy介绍
  • 毕设问题小记——Spring事务配置
  • 对象.delegate=self的理解
  • vsftp虚拟用户配置
  • DevExpress控件使用系列--ASPxUploadControl(图片上传及预览)
  • linux 常用操作命令
  • Android 编程下背景图片适配工具类
  • 时间复杂度分析经典问题——最大子序列和
  • 【跃迁之路】【733天】程序员高效学习方法论探索系列(实验阶段490-2019.2.23)...
  • Docker 笔记(1):介绍、镜像、容器及其基本操作
  • node-sass 安装卡在 node scripts/install.js 解决办法
  • Twitter赢在开放,三年创造奇迹
  • 第13期 DApp 榜单 :来,吃我这波安利
  • 回流、重绘及其优化
  • 力扣(LeetCode)21
  • 聊聊redis的数据结构的应用
  • 码农张的Bug人生 - 见面之礼
  • 如何设计一个微型分布式架构?
  • 深度解析利用ES6进行Promise封装总结
  • (ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY)讲解
  • (vue)页面文件上传获取:action地址
  • (大众金融)SQL server面试题(1)-总销售量最少的3个型号的车及其总销售量
  • (四)docker:为mysql和java jar运行环境创建同一网络,容器互联
  • (转)mysql使用Navicat 导出和导入数据库
  • (转)编辑寄语:因为爱心,所以美丽
  • .NET/C# 编译期间能确定的相同字符串,在运行期间是相同的实例
  • .NET面试题解析(11)-SQL语言基础及数据库基本原理
  • .Net下使用 Geb.Video.FFMPEG 操作视频文件
  • .php文件都打不开,打不开php文件怎么办
  • /etc/fstab 只读无法修改的解决办法
  • @Repository 注解
  • @require_PUTNameError: name ‘require_PUT‘ is not defined 解决方法
  • @Transactional注解下,循环取序列的值,但得到的值都相同的问题
  • @vue/cli 3.x+引入jQuery
  • [C++]二叉搜索树
  • [HackMyVM]靶场 Wild
  • [IE编程] 如何编程清除IE缓存
  • [JavaScript] JavaScript事件注册,事件委托,冒泡,捕获,事件流
  • [LeetCode] 93. Restore IP Addresses 复原IP地址
  • [python] 之 函数简介
  • [python] 之 装饰器
  • [PyTorch][chapter 64][强化学习-DQN]
  • [Quartz笔记]玩转定时调度
  • [SpringBoot系列]缓存解决方案
  • [SpringCloud] OpenFeign核心架构原理 (一)
  • [Spring实战] 整合Spring/SpringMVC/Mybatis(SSM)实现登录与注册功能(带前端)
  • [zt]提问的艺术