如何从MongoDB中读取文件


   引言


   在前两篇博客中给大家介绍了一些基本的概念和安装过程,这些相对来说都是比较简单的,记得在之前的项目


中用到这个技术,但是当时自己对这个东西非常陌生,并且没有太多的时间来研究这个东西,所以当时只是简单的实


现了上传的功能,并且实现的非常的繁琐。现在又有了机会来研究这个东西,所以必须得研究出点东西来了。下面就


给大家介绍如何在mongodb数据库中读取文件并且显示出来,像图片文件和音频文件。


   界面代码


  

  

 作为测试代码,我就在界面上面写了一个image框,用来显示从MongoDB数据库中读取出来的图片。


  HomeController代码


   

 public ActionResult Index()
        {
            ViewData["html"] = "/MongodbHelp/ProcessRequest?actions=DOWNLOAD&value=lf.png";
            return View();
        }
  

   后面的代码组成相信凡是接触过MVC的读者都能看懂这个东西,后面我就直接写死了一个图片的名称。


   MongodbHelpController


   连接数据库的方法

  

        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("local");//创建数据库连接

        }


    用来判断我们进行的方法是哪一个,上传文件还是下载文件,在这只给大家介绍下载的方法;


 

  public void ProcessRequest()
        {

            Init();//initialize the mongo
            string action = Request.QueryString["actions"];

            
            switch (action)
            {
                case "LIST": GetFileList(); break; //获取文件列表
                case "UPLOAD": Upload(); break; //上传文件
                case "DELETE": Delete(); break;//删除文件
                case "DOWNLOAD": DownFile(); break; //下载文件
            }
        }

    下载文件的类


  

 //下载文件
        public void DownFile()
        {
            string filename = Request.QueryString["value"];
            Response.ContentType = "application/octet-stream";
            //context.Response.ContentType = "audio/mpeg";

            Response.AddHeader("Content-Disposition", "attachment; filename=" + filename);

            MongoGridFSSettings fsSetting = new MongoGridFSSettings() { Root = fileTable };
            MongoGridFS fs = new MongoGridFS(DB, fsSetting);
            MongoGridFSFileInfo gfInfo = new MongoGridFSFileInfo(fs, filename);

            //方法一,很简洁
            fs.Download(Response.OutputStream, filename);



            Response.End();
        }

   通过这几段代码,我们就轻松的完成MongoDB数据的文件读取操作。


   小结


   真的的是难的不会回的不难啊,其实之前自己在研究这个东西的时候方向出错了,原先一直认为MongoDB数据库


中存放文件的时候都是以字节流的方式存进去的,直到前几天偶尔看到老徐的MongoDB里面竟然现实的一个完成的图


片的样子,当时自己非常的吃惊。就赶紧问了问。原来她在存文件的时候直接添加的。这样自己才明白过来,原来自


己之前理解的非常的狭窄。所以当我们遇到实在不会做的东西的时候,需要出去走走,不要一味的钻进去研究,可能


在偶然的机会你就来了灵感,分分钟钟就可以实现。


     

你可能感兴趣的:(@项目学习,————MongoDB)