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

    源码

  • 相关阅读:
    sublimetext3安装配置
    .Net Core 商城微服务项目系列(八):购物车
    .Net Core 商城微服务项目系列(七):使用消息队列(RabbitMQ)实现服务异步通信
    eShopOnContainers学习系列(三):RabbitMQ消息总线实践
    Docker系列(五):.Net Core实现k8s健康探测机制
    Docker系列(四):容器之间的网络通信
    Docker系列(三):将.Net Core Api部署到Kubernetes (K8s)中
    Docker系列(二):通过Docker安装使用 Kubernetes (K8s)
    生产环境项目问题记录系列(一):一次循环数据库拖垮服务器问题
    .Net Core 商城微服务项目系列(六):搭建自己的Nuget包服务器
  • 原文地址:https://www.cnblogs.com/winhu/p/MongoDB_Repository_MongoGridFS.html
Copyright © 2011-2022 走看看