博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【Mongo】uploadify插件帮助实现批量上传
阅读量:6423 次
发布时间:2019-06-23

本文共 6891 字,大约阅读时间需要 22 分钟。

   【项目需求】
    在整个考试系统中,我们可将其分为三个部分:考试前、考试中以及考试后。最近一周都在做考试前的配置,我负责的是题库模块,学生考试时是需要从题库中抽题的。而题库,又有不同的题型,单选题、多选题等等。但还有填图题,音频题,这些题目的图片和音频都需要存在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的下载与安装 
    
    
参考教程:
   【开发环境】
    VS2012、MongoDB for Windows 64-bit、MVC框架、EasyUI
   【项目实现】
     
对Mongo有了一些了解之后,那么下面就实战一下,看看如何实现文件的批量上传。
    
 因为需要实现批量上传,所以需要借助Uploadify插件。
     我们
先从前台页面布局样式开始:
1.添加Mongo批量上传插件的引用
@* 引用EasyUI样式 *@    
@*引用mongo批量上传的插件*@
2.前台页面布局设计
@* 批量上传文件到Mongo按钮 *@
3.按钮样式的设置
前台布局样式确定了,下面就真正开始功能的实现。
    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.什么东西都需要去做。没有做之前,可能只会觉得难。又是一个新东西,又不知道如何开始,一个又一个的疑问,不停地怀疑自己,只会耽误自己的效率。

转载地址:http://rnwga.baihongyu.com/

你可能感兴趣的文章
闭包--循序学习
查看>>
项目实战之集成邮件开发
查看>>
解决C3P0在Linux下Failed to get local InetAddress for VMID问题
查看>>
1531 山峰 【栈的应用】
查看>>
巧用美女照做微信吸粉,你会做吗?
查看>>
wcf学习总结《上》
查看>>
ERROR (ClientException)
查看>>
Load Balance 产品横向比较
查看>>
Java代理程序实现web方式管理邮件组成员
查看>>
【编译打包】tengine 1.5.1 SRPM
查看>>
看图说话:手动清除病毒文件流程
查看>>
一句话下拖库
查看>>
Deploy Office Communications Server 2007R2 Group Chat Server(二)
查看>>
在Cacti上实现MSN报警机制
查看>>
如何对C++虚基类构造函数
查看>>
XFire WebService开发快速起步
查看>>
JavaScript 函数replace揭秘
查看>>
QTP解决内嵌IE窗体方法2
查看>>
“王子”的演讲:N828印象
查看>>
判断JS字符串中是否包含某些字符
查看>>