|
本次改动主要实现MongoGridFS功能。实现方式主要使用了MongoGridFS和MongoGridFSFileInfo两个类。
设计思路:定义一个IMongoFile接口并继承IEntity,以实现主要的文件操作。该接口的设计主要参考MongoGridFSFileInfo的属性,以尽量满足在保存文件时各种所需。
public interface IMongoFile : IEntity
{
///
/// remote file name
///
string RemoteFileName { get; set; }
///
/// local file name
///
string LocalFileName { get; set; }
///
/// data
///
byte[] Data { get; }
///
/// MD5
///
string MD5 { get; }
///
/// content type
///
string ContentType { get; }
///
/// size
///
int Size { get; }
///
/// alias
///
string[] Aliases { get; }
///
/// metadata
///
BsonDocument Metadata { get; set; }
///
/// upload date
///
DateTime UploadDate { get; set; }
///
/// add alias
///
/// alias
void AddAlias(string alias);
///
/// add aliases
///
/// aliases
void AddAliases(string[] aliases);
///
/// download file
///
/// abs file full path
void Download(string localFileName);
///
/// download file
///
/// file stream
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 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的主要功能已经完成。欢迎大家在使用时提出意见。该框架还会不断地完善,敬请关注。
源码
|
|
|