C#使用GrdiFS实现在MongoDB中对文件操作

  最近一直在搞负载均衡一块的东西,遇到了一个问题就是文件相关的。这个问题是这样的,一般情况下,我们文件都是存在服务器的本地路上上,正常情况下,完全没问题,但是当服务需要搭负载均衡时,这种文件存储方式的问题就显现出来了。例如我的文件在A服务器上面,当访问B服务器时,就会找不到这个文件,所以我就想办法解决这个问题,无意中发现MongoDB可以存储文件(也不是没想过用数据库存,只是觉得数据库会效率很低),所以决定试一下。


一丶安装MongoDB

  下载地址:https://www.mongodb.com/download-center

  全部选择下一步默认即可,也可以更改一下安装路径,毕竟用来存储文件可能会比较占地方。

二丶安装MongoDB管理工具

  下载地址:https://robomongo.org/

  直接点下一步,默认安装即可。

  MongoDB 默认不需要用户名密码,默认端口是27017,直接用管理工具连接就可以。

  我手动创建了一个库,如下:

  

三丶安装MongoDB.Driver.GridFS

  

  安装图中的包,其他的依赖会自动安装。

四丶文件工具类MongoFactory

public class MongoFactory
    {
        // 读取连接字符串 “mongodb://127.0.0.1:27017”
        private static string strCon = ConfigurationManager.ConnectionStrings["MongoDBConnStr"].ConnectionString;
        private static IMongoDatabase mongoContext;

        static MongoFactory()
        {
            GetMongoContext();
        }

        public static void GetMongoContext()
        {
            var client = new MongoClient(strCon);
            if (client != null)
            {
                //通过数据库名获得上下文 名称可以配置到配置文件里
                mongoContext = client.GetDatabase("TestDB");
            }
        }

        /// <summary>
        /// 上传文件(流)
        /// </summary>
        /// <param name="bucketName">相当于文件夹名</param>
        /// <param name="fileName">文件名</param>
        /// <param name="fs">文件流</param>
        /// <returns></returns>
        public static ObjectId UploadFile(string bucketName, string fileName, Stream fs)
        {
            GridFSBucketOptions options = new GridFSBucketOptions();
            options.BucketName = bucketName;
            var bucket = new GridFSBucket(mongoContext, options);
            var oid = bucket.UploadFromStream(fileName, fs);
            return oid;
        }

        /// <summary>
        /// 获得文件字节数组
        /// </summary>
        /// <param name="bucketName"></param>
        /// <param name="fileId"></param>
        /// <returns></returns>
        public static Byte[] GetFileBytes(string bucketName, string fileId)
        {
            GridFSBucketOptions options = new GridFSBucketOptions();
            options.BucketName = bucketName;
            var bucket = new GridFSBucket(mongoContext, options);
            return bucket.DownloadAsBytes(new ObjectId(fileId));
        }

        /// <summary>
        /// 获得文件流
        /// </summary>
        /// <param name="bucketName"></param>
        /// <param name="fileId"></param>
        /// <returns></returns>
        public static Stream GetFileStream(string bucketName, string fileId)
        {
            MemoryStream stream = new MemoryStream();
            GridFSBucketOptions options = new GridFSBucketOptions();
            options.BucketName = bucketName;
            var bucket = new GridFSBucket(mongoContext, options);
            bucket.DownloadToStream(new ObjectId(fileId), stream);
            return stream;
        }
    }

   Demo地址:https://github.com/923887863/MongoFileDemo.git

猜你喜欢

转载自www.cnblogs.com/Yuuuuu/p/10128284.html