• MongoDB 文件(MongoDB fs)


    1.不管是存储普通数据也好,还是存储文件也好,我们都要先访问MongoDB数据库

    public static MongoDatabase GetDataBase()
            {
                //MongoDB 服务器地址
             var client = new MongoClient(Config.BasicConfig.DbAddress);
                var server = client.GetServer();
                //MongoDb 数据库名称
             return server.GetDatabase(Config.BasicConfig.DbName);
            }
    View Code

    2:取得Fs

    MongoDB获取fs的实例我知道的有两种写法

    • 1:直接通过 DataBase的属性调用,如果我们把MongoDB理解成Sqlserver数据库的话,那么这种方式就是获得到默认表“fs”的实例。
    • 2:通过MongoGridFSSettings设置Root属性值,MongoDB会根据Root的值,来生成具体的表,不需要自己创建

    不说废话,看代码

    //访问一个名为test的文件集合或表,如果没有,则自动创建
    DbHelper.GetDataBase().GetGridFS(new MongoGridFSSettings { Root = "Test"});
    //获取默认的集合或表“fs”
    DbHelper.GetDataBase().GridFS;
    View Code

    3:实现文件上传
    文件上传时,MongoDB提供了一个MongoGridFSCreateOptions类,来完善我们的文件信息,我一般仅仅使用里边的ContentType

    //huo de wen jian ji he
    var fs = DbHelper.GetDataBase().GetGridFS(new MongoGridFSSettings { Root = fileType });
    //chuang jian wen jian shu xing , zhi jie shang chuan de wen jian mei you ContentType shu xing , xu yao shou dong zhi ding
    var op = new MongoDB.Driver.GridFS.MongoGridFSCreateOptions { ContentType = contentType };
    //wen jian shang chuan
    var fileInfo = fs.Upload(stream, filename, op);
    View Code

    4:文件获取
    我在使用MongoDB fs的时候,我利用程序来控制文件的名称唯一,获取的代码

    //获取文件 
    public FileItem GetFile(string fileNo, string fileType)
            {
                //组装文件名称
                var filename = string.Format("{0}_{1}", fileType, fileNo);
                var fs = DbHelper.GetDataBase().GetGridFS(new MongoGridFSSettings
                {
                    Root = fileType
                });
                //根据文件名称,查找文件
                var fileInfo = fs.FindOne(filename);
                if (fileInfo != null && fileInfo.Exists)
                {
                    using (var fileStream = fileInfo.Open(FileMode.Open, FileAccess.Read))
                    {
                        var bytes = new byte[fileStream.Length];
                        //读取文件为bytes
                        fileStream.Read(bytes, 0, bytes.Length);
                        return new FileItem {
                            ContentType = fileInfo.ContentType, FileContent = bytes, Filename = fileInfo.Name, MD5 = fileInfo.MD5, Size = fileInfo.Length + "", 
                            UploadDate = fileInfo.UploadDate
                        };
                    }
                }
                return null;
            }
    View Code

    5:文件修改
    文件修改我就不说废话了,直接看代码就好了

    //修改文件(覆盖)
    public FileItem Upload(string fileNo, string fileType, Stream stream)
            {
                var filename = string.Format("{0}_{1}", fileType, fileNo);
                var fs = DbHelper.GetDataBase().GetGridFS(new MongoGridFSSettings { Root = fileType });
                var oldFileInfo = fs.FindOne(filename);
                if (oldFileInfo != null && oldFileInfo.Exists)
                {
                    var bytes = new byte[stream.Length];
                    stream.Read(bytes, 0, bytes.Length);
                    using (var sw = oldFileInfo.OpenWrite())
                    {
                        sw.Seek(0, SeekOrigin.Begin);
                        sw.Write(bytes, 0, bytes.Length);
                        sw.Flush();
                        oldFileInfo.Refresh();
                    }
                  }
                return new FileItem { ContentType = oldFileInfo.ContentType, FileContent = null, Filename = oldFileInfo.Name, MD5 = oldFileInfo.MD5, Size = oldFileInfo.Length + "", UploadDate = oldFileInfo.UploadDate };
            }
    View Code

    写的好不好不重要,重要的是可以跟有需要的人提供一个参考,也希望大神补充几句,让大家更方便。

  • 相关阅读:
    Servlet的生命周期?
    C++图结构的图结构操作示例
    如何从google play下载app应用,直接下载apk
    C# Socket异步聊天例子
    三极管饱和,放大,截止电压判断
    java中的浮点(float)运算
    微软2014校园招聘笔试试题
    软件开发中的资源控制问题学习
    linux mount命令学习
    17、Spring Boot普通类调用bean【从零开始学Spring Boot】
  • 原文地址:https://www.cnblogs.com/lwein/p/3941040.html
Copyright © 2020-2023  润新知