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

源码

 

 

 

 

 

posted on 2013-10-29 17:01  winhu  阅读(1746)  评论(1编辑  收藏  举报

导航