如何向MongoDB中存入文件?

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
简介: 如何向MongoDB中存入文件?

引言


在前面的博客中给大家介绍了我们如何从MongoDB数据库中读取文件并显示在界面中,从我们的代码中可以看出这个过程是比较简单的,那么下面就给大家介绍如何向MongoDB数据库中提交文件。首先说说之前我的做法:之前在我们的项目中向MongoDB数据库中存入文件是比较麻烦的,我们首先通过file控件将文件上传到本地的某个路径下,然后获的这个文件的全路径后,在存入MongoDB数据库中,然后在删除本地路径下的文件,这样做无疑是多此一举了,非常的麻烦,当然了代码量也是非常多的非常的不可取。那么下面我就给个打家介绍一种比较简单的方法来实现此功能。


前台页面代码

@*上传文件代码,可以实现*@
@using (Html.BeginForm("ProcessRequest", "MongodbHelp", new { actions = "UPLOAD" }, FormMethod.Post, new { enctype = "multipart/form-data" }))
{
    <input type="file" name="file" id="file" />
    <input type="submit" value="上传" />
}

界面中有一个file控件和一个按钮组成,这样就可以完成上传特定的文件了。

 

MongodbHelpeController代码

   

数据库连接代码


  private static MongoDatabase DB;
        public static string fileTable = "fs";
        //Sets up the environment.
        public void Init()
        {
            string ConnectionString = "127.0.0.1";  //ConfigurationManager.AppSettings["mondoDbConnection"];
            if (String.IsNullOrEmpty(ConnectionString))
            {
                throw new ArgumentNullException("Connection string not found.");
            }
            MongoServerSettings mongoSetting = new MongoServerSettings();
            mongoSetting.MaxConnectionPoolSize = 15000;//设定最大连接池
            mongoSetting.WaitQueueSize = 500;//设定等待队列数
            mongoSetting.Server = new MongoServerAddress(ConnectionString, 27017);
            int count = MongoServer.MaxServerCount;
            MongoServer server = MongoServer.Create(mongoSetting);//创建连接数据文件
            DB = server.GetDatabase("local");//创建数据库连接
        }

方法选择代码:通过传递的参数来决定执行什么功能的代码!!

 public void ProcessRequest()
        {
            Init();//initialize the mongo
            string action = Request.QueryString["actions"];
            switch (action)
            {
                case "LIST": GetFileList(); break; //获取文件列表
                case "UPLOAD": Upload(); break; //上传文件
                case "DELETE": Delete(); break;//删除文件
                case "DOWNLOAD": DownFile(); break; //下载文件
            }
        }


上传文件的核心代码:

 //上传文件
        public void Upload()
        {
            try
            {
                HttpPostedFileBase file = (HttpPostedFileBase)Request.Files["file"];
                int nFileLen = file.ContentLength;
                MongoGridFSSettings fsSetting = new MongoGridFSSettings() { Root = fileTable };
                MongoGridFS fs = new MongoGridFS(DB, fsSetting);
                byte[] myData = new Byte[nFileLen];
                file.InputStream.Read(myData, 0, nFileLen);
                //调用Write、WriteByte、WriteLine函数时需要手动设置上传时间
                //通过Metadata 添加附加信息
                MongoGridFSCreateOptions option = new MongoGridFSCreateOptions();
                option.UploadDate = DateTime.Now;
                //创建文件,文件并存储数据
                using (MongoGridFSStream gfs = fs.Create(file.FileName, option))
                {
                    gfs.Write(myData, 0, nFileLen);
                    gfs.Close();
                }
            }
            catch (Exception e)
            {
                Response.Write(0);
            }
            Response.Write(1);
            Response.End();
        }

这样我们就完成了文件的上传,细心的读者会发现,我们在页面中写了一个表单和一个submit类型的按钮,这样我们提交的时候会将整个表单内容提交,这样我们就在controller中利用Request.Files来获得我们提交的文件,但是如果我们利用ajax的写法就不行了,代码如下:

function upload() {
        var files = document.getElementById("file").value;
       alert(document.getElementById("file").value);
        $.post(
         "/MongodbHelp/ProcessRequest?actions=UPLOAD",
           { "file": files },
           "multipart/form_data"
            )
    }

这些写的代码我们在controller中利用Request.Fiels根本无法获得值,并且我们在ajax中获得的files的值,只有一文件的名称,是不能获得文件的全路径的。这是因为现在的浏览器的安全程度非常的高,file控件只有杂IE浏览器中能获得全路径,其他的浏览器都是不行的,这方面的代码和写法需要继续研究,希望在这方面有研究的读者们能给一建议


小结


现在我们在上传之前是不需要在先存储在本地的文件下面了,而是直接上传到MongoDB数据库中,这样才是非常爽的方法,通过之前我们的总结到现在为止我们可以实现对MongoDB的上传和下载了,但是这仅仅是个入门的学习,在接下来的时间里会继续研究它。希望这几篇博客能给读者们带来帮助!!!


相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。 &nbsp; 相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
目录
相关文章
|
NoSQL MongoDB Docker
Docker Compose安装MongoDB,并向宿主机映射数据文件/配置文件/日志文件
本文为博主实践Docker Compose方式安装MongoDB记录,希望对大家有所帮助。
3084 0
|
5月前
|
SQL NoSQL 数据管理
数据管理DMS使用问题之如何批量导入MongoDB的数据文件
阿里云数据管理DMS提供了全面的数据管理、数据库运维、数据安全、数据迁移与同步等功能,助力企业高效、安全地进行数据库管理和运维工作。以下是DMS产品使用合集的详细介绍。
|
7月前
|
存储 NoSQL MongoDB
MongoDB数据库转换为表格文件的Python实现
MongoDB数据库转换为表格文件的Python实现
221 0
|
NoSQL MongoDB 数据安全/隐私保护
Docker 安装MongoDB 以及 相关配置文件、数据文件映射
本文是博主使用docker安装mongodb的方法记录,希望对大家有所帮助。
1964 0
|
7月前
|
存储 NoSQL MongoDB
【MongoDB 专栏】MongoDB 的 GridFS:存储与检索大文件
【5月更文挑战第10天】MongoDB&#39;s GridFS 是用于大规模数据和大文件存储的解决方案,它将文件分割成小块存储在不同文档中,以提升管理效率和避免性能问题。文件上传时记录元数据,通过唯一标识符实现快速检索。GridFS 提供高效存储、便捷检索和扩展性,适用于大文件管理。然而,应注意文件大小限制、数据一致性和性能优化。通过案例分析,展示了 GridFS 在实际应用中的优势和适用场景,为构建强大应用提供支持。
360 1
【MongoDB 专栏】MongoDB 的 GridFS:存储与检索大文件
|
7月前
|
NoSQL MongoDB 数据库
MongoDB数据恢复—MongoDB数据库文件被破坏的数据恢复案例
服务器数据恢复环境: 一台Windows Server操作系统服务器,服务器上部署MongoDB数据库。 MongoDB数据库故障&检测: 工作人员在未关闭MongoDB数据库服务的情况下,将数据库文件拷贝到其他分区。拷贝完成后将原MongoDB数据库所在分区进行了格式化操作,然后将数据库文件拷回原分区,重新启动MongoDB服务,服务无法启动。
|
存储 NoSQL Shell
如何将阿里云WiredTiger引擎的MongoDB物理备份文件恢复至自建数据库
数据库操作一直是一个比较敏感的话题,动不动“删库跑路”,可见数据库操作对于一个项目而言是非常重要的,我们有时候会因为一个游戏的严重bug或者运营故障要回档数据库,而你们刚好使用的是阿里云的Mongodb,那么这篇文章将给你提供一个思路(或许你按照阿里云官网的文档一顿操作下来,并不是那么顺利,有一些报错,无法登录...)
|
SQL NoSQL 数据可视化
如何删除MongoDB数据库中的文件?
如何删除MongoDB数据库中的文件?
336 0
|
NoSQL 前端开发 MongoDB
如何从MongoDB中读取文件
如何从MongoDB中读取文件
382 0
|
存储 JSON NoSQL
SpringBoot学习笔记(十一:使用MongoDB存储文件 )
SpringBoot学习笔记(十一:使用MongoDB存储文件 )
740 0
SpringBoot学习笔记(十一:使用MongoDB存储文件 )