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

    源码

  • 相关阅读:
    编译Excel遇到的DialogBoxW宏的实参不足问题
    C# 简单连接数据库并执行SQL查询语句
    AutoCAD VBA 遍历所有对象
    VBA: 错误消息:"类未注册"插入用户窗体
    解决Qt程序发布时中文乱码问题
    Qt操作excel
    HWND_BROADCAST的一个用法——修改环境变量,立即通知系统
    VC环境使用XML解析器(TinyXML)编程
    C++ XML解析之TinyXML篇(转载)
    C/C++枚举目录中的文件或文件夹
  • 原文地址:https://www.cnblogs.com/winhu/p/MongoDB_Repository_MongoGridFS.html
Copyright © 2011-2022 走看看