【Mongo】uploadify插件帮助实现批量上传

   【项目需求】

    在整个考试系统中,我们可将其分为三个部分:考试前、考试中以及考试后。最近一周都在做考试前的配置,我负责的是题库模块,学生考试时是需要从题库中抽题的。而题库,又有不同的题型,单选题、多选题等等。但还有填图题,音频题,这些题目的图片和音频都需要存在Mongo数据库中,所以,我开始了我的Mongo实践之旅。

   【Mongo入门】

    1.什么是MongoDB

MongoDB是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。

MongoDB将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB文档类似于JSON对象。字段值可以包含其他文档,数组及文档数组。 

2.MongoDB的特点 

  • MongoDB的提供了一个面向文档存储,操作起来比较简单和容易。
  • Mongo支持丰富的查询表达式。查询指令使用JSON形式的标记,可轻易查询文档中内嵌的对象及数组。
  • GridFS是MongoDB中的一个内置功能,可以用于存放大量小文件。
  • MongoDB允许在服务端执行脚本,可以用Javascript编写某个函数,直接在服务端执行,也可以把函数的定义存储在服务端,下次直接调用即可。
  • MongoDB支持各种编程语言:RUBY,PYTHON,JAVA,C++,PHP,C#等多种语言。
  • MongoDB安装简单......

     
   3.MongoDB的下载与安装 

        参考教程:http://www.runoob.com/mongodb/mongodb-window-install.html

   【开发环境】

    VS2012、MongoDB for Windows 64-bit、MVC框架、EasyUI

   【项目实现】

     对Mongo有了一些了解之后,那么下面就实战一下,看看如何实现文件的批量上传。

     因为需要实现批量上传,所以需要借助Uploadify插件。

     我们先从前台页面布局样式开始:

1.添加Mongo批量上传插件的引用

 @* 引用EasyUI样式 *@
    <link rel="stylesheet" type="text/css" href="../Content/jquery-easyui-1.3.2/themes/default/easyui.css">
    <link rel="stylesheet" type="text/css" href="../Content/jquery-easyui-1.3.2/themes/icon.css">
    <link rel="stylesheet" type="text/css" href="../Content/jquery-easyui-1.3.2/demo/demo.css">
    <script type="text/javascript" src="../Content/jquery-easyui-1.3.2/jquery-1.8.0.min.js"></script>
    <script type="text/javascript" src="../Content/jquery-easyui-1.3.2/jquery.easyui.min.js"></script>
    @*引用mongo批量上传的插件*@
    <link href="../Scripts/uploadify-v3.1/uploadify.css" rel="stylesheet">
    <script src="../../Scripts/uploadify-v3.1/jquery.uploadify-3.1.min.js"></script>
    <script src="../Content/jquery-easyui-1.3.2/locale/easyui-lang-zh_CN.js"></script> 

2.前台页面布局设计

<div style="margin-left:700px;margin-top:-600px;">
        <div id="q" data-options="iconCls:' icon-save'"  class="easyui-panel" title="音频图片文件管理" style="width: 400px; height: 500px; padding: 20px;">
     @* 批量上传文件到Mongo按钮 *@
            <div style="margin-left:20px;margin-top:20px;">
                <input type="file" id="file_upload" name="file_upload" value="添加文件"/>
            </div>
            <div style="margin-top: 5px;margin-left:20px;">
                <a id="upload" class="easyui-linkbutton" data-options="iconCls:'icon-export'" style="padding-left: 30px;margin-top:10px;" >上传</a><br />
               <a id="cancel" class="easyui-linkbutton" data-options="iconCls:'icon-cancel'" style="padding-left: 30px;margin-top:10px;">取消</a>
            </div>
         </div>
    </div> 

3.按钮样式的设置

<style>
        .uploadify-button{
            color:#444;
            border: 1px solid #b7d2ff;
            filter: none;
            background: #eaf2ff;
            height:25px;
            width:90px;
        }
        .uploadify:hover .uploadify-button{
            background:#eaf2ff;
            color:#000000
        }
        .center {
            width: 1000px;
            margin: 5px auto;
        }
</style>  

前台布局样式确定了,下面就真正开始功能的实现。

    1.Client端

   使用MongoDB,需要先在客户端添加三个引用,MongoDB、MongoDB Bson和MongoDB Driver。

    2.Controller:

   在MVC框架下的Controller中,类似于写了一个MongoHelper类,其中可接受前台传来的四种操作,"LIST"(获取文件列表);"DELETE"(删除文件);"UPLOAD"(上传文件);"DOWNLOAD"(下载文件)。本篇博客,仅看上传文件方法:

public class MongodbHelpController : Controller
    {
        //
        // GET: /MongodbHelp/
            //全局变量
            private static MongoDatabase DB;
            public static string fileTable = "fs";//相当于我们需要操作的表的名称
            //Sets up the environment.
            public void Init()
            {
                //连接本地数据库
                string ConnectionString = "127.0.0.1";  //ConfigurationManager.AppSettings["mondoDbConnection"];
                if (String.IsNullOrEmpty(ConnectionString))
                {
                    throw new ArgumentNullException("Connection string not found.");
                }
                MongoServerSettings mongoSetting = new MongoServerSettings();
                mongoSetting.MaxConnectionPoolSize = 15000;//设定最大连接池
                mongoSetting.WaitQueueSize = 500;//设定等待队列数
                mongoSetting.Server = new MongoServerAddress(ConnectionString, 27017);
                int count = MongoServer.MaxServerCount;
                MongoServer server = MongoServer.Create(mongoSetting);//创建连接数据文件
                DB = server.GetDatabase("DBTest");//创建数据库连接
            }
            public void ProcessRequest()
            {
                Init();//initialize the mongo
                //获取前台页面的action值
                string action = Request.Form["action"];
                switch (action)
                {
                    case "LIST": GetFileList(); break; //获取文件列表
                    case "UPLOAD": Upload(); break; //上传文件
                    case "DELETE": Delete(); break;//删除文件
                    case "DOWNLOAD": DownFile(); break; //下载文件
                }
            }
            public bool IsReusable
            {
                get
                {
                    return false;
                }
            }
            //上传文件
            public void Upload()
            {
                try
                {
                    //设置一次只上传一个文件,值为File
                    //设置上传多个文件,值为Filedata;
                    HttpPostedFileBase file = (HttpPostedFileBase)Request.Files["Filedata"];
                    //获取文件
                    int nFileLen = file.ContentLength;
                    MongoGridFSSettings fsSetting = new MongoGridFSSettings() { Root = fileTable };
                    MongoGridFS fs = new MongoGridFS(DB, fsSetting);
                    byte[] myData = new Byte[nFileLen];
                    file.InputStream.Read(myData, 0, nFileLen);
                    //调用Write、WriteByte、WriteLine函数时需要手动设置上传时间
                    //通过Metadata 添加附加信息
                    MongoGridFSCreateOptions option = new MongoGridFSCreateOptions();
                    option.UploadDate = DateTime.Now;
                    //创建文件,文件并存储数据
                    using (MongoGridFSStream gfs = fs.Create(file.FileName, option))
                    {
                        gfs.Write(myData, 0, nFileLen);
                        gfs.Close();
                    }
                }
                catch (Exception e)
                {
                    Response.Write(0);
                }
                Response.End();
            }
    }  

 3.JavaScript:

    在Controller中写好了方法,下面我们只需要在前台页面写JS调用即可。下面是JS代码:

//================上传文件到Mongo-胡志婷-2016年3月29日14:28:26================//
           $("#file_upload").uploadify({
               'auto': false,  //是否自动上传
               'buttonText': '添加文件',  //按钮显示文本
               'successTimeout': 99999,  //成功等待时间
               'swf': '../../Scripts/uploadify-v3.1/uploadify.swf',  //uploadify路径
               'uploader': '/MongodbHelp/ProcessRequest',  //定义服务器端上传数据处理脚本文件swf的路径
               'multi': true,  //允许选择多个文件
               'fileSizeLimit': '1600MB',   //文件最大的大小
               'queueSizeLimit': 10,  //一次最多可选择的文件数量
               'progressData': 'speed',  //上传文件显示的样式,进度条
               'onSelectError': function (file, errorCode, errorMsg) {  //出错提示
                   switch (errorCode) {
                       case -100:
                           alert("上传的文件数量已经超出系统限制的" + jQuery('#file_upload').uploadify('settings', 'queueSizeLimit') + "个文件!");
                           break;
                       case -110:
                           alert("文件 [" + file.name + "] 大小超出系统限制的" + jQuery('#file_upload').uploadify('settings', 'fileSizeLimit') + "大小!");
                           break;
                       case -120:
                           alert("文件 [" + file.name + "] 大小异常!");
                           break;
                       case -130:
                           alert("文件 [" + file.name + "] 类型不正确!");
                           break;
                   }
               },
               'onQueueComplete': function (queueData) {  //所有文件被处理完成时触发该事件
                   getFiles();
                   alert("文件上传成功!");
                   return;
               }
           });
           //上传按钮
           $("#upload").click(function () {
               $("#file_upload").uploadify('settings', 'formData', { action: 'UPLOAD' });
               $("#file_upload").uploadify('upload', '*');
           });
           //取消按钮
           $("#cancel").click(function () {
               $("#file_upload").uploadify('cancel', '*');
           });  

整个功能,实现的代码也就完成了,下面看看实现过程中的效果:

点击添加文件,选择需要上传的文件:

	  

点击上传,文件开始上传:

         

上传的功能应该说是学习Mongo必须有的一个实践,通过这样一个实践,其它的需求,如下载,查询等,实现就更加简单了。在此也不一一列举了。

    【项目感悟】

   1.学习既需要广度,也需要深度。在上一版ITOO项目中,自己每天都会利用些时间去了解项目中的技术点,所以对于Mongo的学习,前面有过一些了解,也有一些简单的实践,那可以算是广度上的学习。这一次,项目中再遇到,可以算是一次深度的学习了。

   2.站在巨人的肩膀上。在自己身边,总会有一些已经接触或是学习过,自己正在或正要接触或学习的东西。不妨适当的问问他们,也可以帮助自己快速找到解决方案或是达到自己的学习目标。

   3.什么东西都需要去做。没有做之前,可能只会觉得难。又是一个新东西,又不知道如何开始,一个又一个的疑问,不停地怀疑自己,只会耽误自己的效率。

时间: 2025-01-24 00:25:03

【Mongo】uploadify插件帮助实现批量上传的相关文章

利用jquery.uploadify插件来实现图片上传和预览效果

文章是告诉你如何利用jquery.uploadify插件来实现图片上传和预览效果,首页我们要看看关于利用jquery uploadify上传图片要注意事项吧. 注意事项 (1).如果页面没有显示"browse"按钮,则说明你的'uploader' : '<%=basepath%>images/uploadify.swf'配置不对,检查下路径是否正确. (2).如果需要修改按钮的图片:可以使用'buttonimg'配置进行替换 (3).上传完成后,'oncomplete'事件

Plupload功能强大的多文件批量上传插件

Plupload 是一个Web浏览器上的界面友好的文件上传模块,可显示上传进度.图像自动缩略和上传分块.可同时上传多个文件,为您的内容管理系统或是类似上传程序提供一个高度可用的上传插件. Plupload功能强大的多文件批量上传插件 Plupload这个JavaScript控件可以让你选择Adobe Flash.Google Gears.HTML5.Microsoft Silverlight.Yahoo BrowserPlus或正常表单Form等多种方法进行文件上传. Plupload还提供其它

结合bootstrap fileinput插件和Bootstrap-table表格插件,实现文件上传、预览、提交的导入Excel数据操作流程

1.bootstrap-fileinpu的简单介绍 在前面的随笔,我介绍了Bootstrap-table表格插件的具体项目应用过程,本篇随笔介绍另外一个Bootstrap FieInput插件的使用,整合两者可以实现我们常规的Web数据导入操作,导入数据操作过程包括有上传文件,预览数据,选择并提交记录等一系列操作. 关于这个插件,我在早期随笔<Bootstrap文件上传插件File Input的使用>也做了一次介绍,这是一个增强的 HTML5 文件输入控件,是一个 Bootstrap 3.x

jquery插件uploadify实现带进度条的文件批量上传_jquery

有时项目中需要一个文件批量上传功能时,个人认为uploadify是快速简便的解决方案,分享给大家供大家参考,具体如下 先上效果图: 具体代码如下: 在页面中如下 完整页面代码 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> <!DOCTYPE html> <

jQuery.Uploadify插件实现带进度条的批量上传功能_jquery

本文实例讲述了jQuery.Uploadify插件实现带进度条的批量上传功能.分享给大家供大家参考,具体如下: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="UpLoad.aspx.cs" Inherits="UploadifyDemo_UpLoad" %> <html xmlns="http://www.w3.org/1999/xh

ASP.NET插件uploadify批量上传文件完整使用教程_实用技巧

uploadify批量上传文件完整使用教程,供大家参考,具体内容如下 1.首先准备uploadify的js文件,网上一搜一大堆 2.上传页面UpFilePage.aspx 关键代码: <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <meta http-equiv="Content-Type" content="text/h

插件-bootstrap file-input 图片批量上传问题

问题描述 bootstrap file-input 图片批量上传问题 我用该bootstrap file-input插件的时候,多个图片上传出现以下情况,大侠求助: 解决方案 代码和样式贴出来看一下 解决方案二: 静态页面代码: <form name="queryForm" id="queryForm" action="${basePath}sns/album/Album/stulist.do" method="post"

基于uploadify.js实现多文件上传和上传进度条的显示

uploadify是JQuery的一个插件,主要实现文件的异步上传功能,可以自定义文件大小限制.文件类型.是否自动上传等属性,可以显示上传的进度条.官网地址是http://www.uploadify.com/,进入官网首页(不截图了,其实也没啥看的),可以看到uploadify的标语"Upload files like magic",意思是说使用uploadify上传文件如魔法一般.目前一共分为两个版本,Flash版和HTML5版,不过HTML5版是收费的,如图: 这里我们下载Flas

关于图片批量上传预览

问题描述 我正在做一个需要用到图片批量上传预览的项目批量上传和预览目的都已经达到可是现在要求在预览的时候可以对图片添加备注这个把我难住了我的图片上传预览参考了http://blog.csdn.net/sq111433/article/details/16872403这篇文章,非常感谢原作者大家有没有能帮个忙的,我想了很久,还是没搞定 解决方案 解决方案二:要么给每个图片动态添加一个文本框要么仅放一个可见的文本框,根据点了哪个图片,JS把文本内容写进对应的hidden里提交(或者用个不可见的表格?