MongoDB对文件的增、删、查

来源:互联网 发布:免费唱歌录音软件 编辑:程序博客网 时间:2024/05/06 20:16

            最近做一级的项目,老师要求学生的答题的word,excel,ppt都要保存上,以便学生以后来咨询的时候老师能拿出来学生当时的答题情况,所以就有了这么一个情况,就是保存学生的答题记录,所以我想了一下,既然只是保存答题的一些信息,就用了MongoDB去实现文件的存取。

       安装

       对于MongoDB的安装,我就不在赘述了,大家有不懂得,大家照着这篇博客一点一点的操作就可以:http://blog.csdn.net/lovemenghaibin/article/details/43205475

           因为咱们要实现GridFS对数据的存取,所以还需要两个驱动MongoDB.Bson.dll,MongoDB.Driver.dll

     增删差

       上传

       上传话用到了GridFS的upload方法,所以我的方法就和他起了一样的名字,代码如下:
/// <summary>        /// 上传学生答题记录的压缩包到数据库Upload        /// </summary>        /// <param name="strSourceFile">学生答题记录的压缩包,例如D:\\11070141021</param>        /// <param name="strFileName">数据库中保存的文件名称(使用学好).例如:11070141021</param>        /// <param name="strGridFS">GRIDFS保存的数据集合的名称</param>        public void Upload(string strSourceFile, string strFileName, string strGridFS)        {            //定义一个本地文件的路径字符串            string localFileName = strSourceFile;            //定义mongoDB数据库中文件的名称            string mongoDBFileName = strFileName;            //设置GridFS文件中对应的集合前缀名            MongoGridFSSettings fsSetting = new MongoGridFSSettings() { Root = strGridFS };            //实例化一个GridFS            MongoGridFS gridfs = new MongoGridFS(database, fsSetting);            //将本地文件上传到mongoDB中去,以默认块的大小256KB对文件进行分块            gridfs.Upload(localFileName, mongoDBFileName);        } 

      查询

      Mongo的保存文件信息的时候他就是保存的Bson,所以我们读取的时候就以json的形式都出来,至于咱们用的时候怎么转化成DataTable,大家网上找一下就可以,我这里就直接返回json了。
       
 /// <summary>        /// 获取集合GetInfoList        /// </summary>        /// <param name="fileName">查询的关键字,以学好信息为准</param>        /// <param name="strGridFs">GridFS的名称</param>        /// <returns></returns>        public string GetInfoList(string fileName, string strGridFs)        {            MongoGridFSSettings fsSetting = new MongoGridFSSettings() { Root = strGridFs };            MongoGridFS fs = new MongoGridFS(database, fsSetting);            MongoCollection collection = database.GetCollection(strGridFs + ".files");            string filesJSON = "[";            //排序方法-按照时间降序排列            SortByDocument sort = new SortByDocument {                 {"filename", 1},                {"uploadDate", -1}            };            //关键字查询            Regex findby = new Regex(@".*" + fileName + ".*", RegexOptions.IgnoreCase);            QueryDocument query = new QueryDocument            {                {"filename", findby}            };            MongoCursor<MongoGridFSFileInfo> docList = fs.Find(query).SetSortOrder(sort);            foreach (MongoGridFSFileInfo doc in docList)            {                UInt32 length = Convert.ToUInt32(doc.Length);                string size = null;                if (length > 1024 * 1024)                    size = ((double)length / 1024 / 1024).ToString("F2") + "MB";                else if (length > 1024)                    size = ((double)length / 1024).ToString("F2") + "KB";                else                    size = length.ToString() + "B";                filesJSON += "{\"name\":\"" + doc.Name + "\",\"lastModify\":\"" + Convert.ToDateTime(doc.UploadDate).ToLocalTime().ToString() + "\", \"size\":\"" + size + "\"},";            }            if (filesJSON.EndsWith(","))            {                filesJSON = filesJSON.Substring(0, filesJSON.Length - 1);            }            filesJSON += "]";            return filesJSON;        } 

       下载(Download)

       下载非常的简单,就是一个DownLoad方法
 /// <summary>        /// 下载指定的文件DownLoad        /// </summary>        /// <param name="strGridFs"></param>        /// <param name="strFileName"></param>        public void DownLoad( string strFileName,string strGridFs)        {            //设置GridFS文件中对应的集合前缀名            MongoGridFSSettings fsSetting = new MongoGridFSSettings() { Root = strGridFs };            //实例化一个GridFS            MongoGridFS fs = new MongoGridFS(database, fsSetting);            //根据学好拼接出一个压缩包的名称            string fileName = strFileName ;            fs.Download(fileName);        } 

      删除

      删除和下载几乎一样,直接调用一个方法就可以。
 /// <summary>        /// 删除文件        /// </summary>        /// <param name="fileName">文件名称</param>        /// <param name="strGridFS">GridFS的学院名称</param>        public void Delete(string fileName, string strGridFS)        {            MongoGridFSSettings fsSetting = new MongoGridFSSettings() { Root = strGridFS };            MongoGridFS fs = new MongoGridFS(database, fsSetting);            fs.Delete(fileName);        } 
       看是不是非常的简单,但是这个下载却折磨了我整整一天,找了很多的方法,都没有可以替代的,最后才发现,原来是我链接数据库的字符串不对,所以才导致了不能下载和删除的操作,链接字符串的时候要在后边加一句safe=true,例如:  private string connectionString = "mongodb://localhost:27017/?safe=true";

       客户端

<span style="font-weight: normal;"> private void button1_Click(object sender, EventArgs e)        {            ZipHelper.CreateZip(@"F:\360Apps", @"F:\360Apps.zip");            //申明一个实例            MongoHelper mh = new MongoHelper("menghaibin");            //上传            mh.Upload(@"d:\110701410211.zip", "110701410211.zip", "test");            //查询            string json = mh.GetInfoList("1107014", "test");            //下载            mh.DownLoad( "110701410211.zip","test");            //删除            mh.Delete("110701410211.zip", "test");        }</span>
       这样一个简单的MongoDB对数据库的操作就算是完成,当然原理的东西,我以后慢慢讲吧。

0 0
原创粉丝点击