• 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的主要功能已经完成。欢迎大家在使用时提出意见。该框架还会不断地完善,敬请关注。

    源码

  • 相关阅读:
    4.9cf自训9..
    数位dp-入门模板题 hdu2089
    熟能生巧 汽车停车入位技巧解析-倒车入库--侧边停车
    MyBatis参数传入集合之foreach动态sql
    jquery如何判断checkbox(复选框)是否被选中
    Mybatis关联查询(嵌套查询)
    Mysql 分页语句Limit用法
    $.ajax返回的JSON格式的数据后无法执行success的解决方法
    JavaWeb学习总结(十二)——Session
    Spring MVC中Session的正确用法之我见
  • 原文地址:https://www.cnblogs.com/winhu/p/MongoDB_Repository_MongoGridFS.html
Copyright © 2020-2023  润新知