zoukankan      html  css  js  c++  java
  • MongoDB:利用官方驱动改装为EF代码风格的MongoDB.Repository框架 四

    本次改动主要实现MongoGridFS功能。实现方式主要使用了MongoGridFS和MongoGridFSFileInfo两个类。

    设计思路:定义一个IMongoFile接口并继承IEntity,以实现主要的文件操作。该接口的设计主要参考MongoGridFSFileInfo的属性,以尽量满足在保存文件时各种所需。

        public interface IMongoFile : IEntity
        {
            /// <summary>
            /// remote file name
            /// </summary>
            string RemoteFileName { get; set; }
            /// <summary>
            /// local file name
            /// </summary>
            string LocalFileName { get; set; }
            /// <summary>
            /// data
            /// </summary>
            byte[] Data { get; }
            /// <summary>
            /// MD5
            /// </summary>
            string MD5 { get; }
            /// <summary>
            /// content type
            /// </summary>
            string ContentType { get; }
            /// <summary>
            /// size
            /// </summary>
            int Size { get; }
            /// <summary>
            /// alias
            /// </summary>
            string[] Aliases { get; }
            /// <summary>
            /// metadata
            /// </summary>
            BsonDocument Metadata { get; set; }
            /// <summary>
            /// upload date
            /// </summary>
            DateTime UploadDate { get; set; }
            /// <summary>
            /// add alias
            /// </summary>
            /// <param name="alias">alias</param>
            void AddAlias(string alias);
            /// <summary>
            /// add aliases
            /// </summary>
            /// <param name="aliases">aliases</param>
            void AddAliases(string[] aliases);
            /// <summary>
            /// download file
            /// </summary>
            /// <param name="localFileName">abs file full path</param>
            void Download(string localFileName);
            /// <summary>
            /// download file
            /// </summary>
            /// <param name="stream">file stream</param>
            void Download(Stream stream);
        }

    MongoFile是该接口的实现。MongoFile主要有三个带参构造函数

    MongoDB.Repository.MongoFile.MongoFile(string, string, string)
    MongoDB.Repository.MongoFile.MongoFile(System.IO.Stream, string, string)
    MongoDB.Repository.MongoFile.MongoFile(MongoDB.Driver.GridFS.MongoGridFSFileInfo)

    前两个均为上传时使用,用以初始构造,调用IMongoFile.Save()后将文件保存。用例如下:

                IMongoFile file = MongoEntity.CreateFile(@"c:pic1.jpg", "pic1.jpg", "jpg");
                file.Save();

    另在MongoEntity中增加了一些公共方法,用以查询、删除和下载文件。如:

    void MongoDB.Repository.MongoEntity.DownloadFile(string, string)
    void MongoDB.Repository.MongoEntity.DownloadFile(string, System.IO.Stream)
    void MongoDB.Repository.MongoEntity.RemoveFile(string)
    void MongoDB.Repository.MongoEntity.RemoveFiles(string)
    IMongoFile MongoDB.Repository.MongoEntity.LoadFile(string)
    List<IMongoFile> MongoDB.Repository.MongoEntity.LoadAllFiles(string)
    RemoveFile和RemoveFiles的区别在于RemoveFile的参数是id,而RemoveFiles的参数是romoteFileName,因为在MongoDB中,文件名是可以重复的,不能重复的是id。
    所以也就有了LoadFile和LoadFiles。

    下面提供一个简单的使用案例:
                IMongoFile file = MongoEntity.CreateFile(@"c:pic1.jpg", "pic1.jpg", "jpg");
                file.Save();
                IMongoFile fs = MongoEntity.LoadFile(file.Id);
                fs.Download(@"c:a.jpg");
                var files = MongoEntity.LoadAllFiles("test.xml");
                MongoEntity.DownloadFile(file.Id, @"c:copy.jpg");
                MongoEntity.RemoveFile(file.Id);

    至此,MongoDB.Repository的主要功能已经完成。欢迎大家在使用时提出意见。该框架还会不断地完善,敬请关注。

    源码

  • 相关阅读:
    今天要查一下,如果没有密保手机的号码在使用,怎么更换qq的密保手机
    昨天晚上让妈妈弄了一下机顶盒的安装
    Help Tomisu UVA
    UVA 1363 Joseph's Problem 找规律+推导 给定n,k;求k%[1,n]的和。
    UVA 1640 The Counting Problem UVA1640 求[a,b]或者[b,a]区间内0~9在里面各个数的数位上出现的总次数。
    ZOJ 3962 Seven Segment Display 16进制的八位数加n。求加的过程中所有的花费。显示[0,F]有相应花费。
    ZOJ 3963 Heap Partition set维护。给一个序列,将其划分成尽量少的序列,使每一个序列满足按照顺序构造二叉树,父母的值<=孩子的值。
    Irrelevant Elements UVA
    GCD XOR UVA 12716 找规律 给定一个n,找多少对(a,b)满足1<=b<=a<=n,gcd(a,b)=a^b;
    Colossal Fibonacci Numbers! UVA 11582 寻找循环节
  • 原文地址:https://www.cnblogs.com/winhu/p/MongoDB_Repository_MongoGridFS.html
Copyright © 2011-2022 走看看