Mongo中上传下载图片
来源:互联网 发布:px4飞控源码 百度云 编辑:程序博客网 时间:2024/05/16 09:11
在ITOO中教师使用在线编辑的方法出卷,有一个需求是可以针对某一个题配上相应的图片,所以要做一个上传
图片的功能。在ITOO中图片很音频都是直接存储在MongoDB中的,为了实现这个功能自己先做了一个小Demo,实现
上传和下载图片的功能。
在开始看Demo前先来了解一个Mongo中的GridFS,它是用于存储和恢复那些超过16M的文件可以是图片、音
频、视频。GridFS将文件分成大块,将每个大块存储为单独的文件.GridFS中限制chunk(文件片段)最大为256k。每
chunk将作为MongoDB的一个文档(document)被存储在chunks集合中,每个文件的实际内容被存在chunks(二进制数据)
中。本文章的Demo就是将图片上传到GridFS中的。
首先需要添加两个和Mongo有关的dll,分别为MongoDB.Bson和MongoDB.Driver。
配置文件中,在<appSettings>节点下添加,其中key是在连接数据库时使用的,value则是MongoDB所在的服务
器的IP地址。
<span style="font-size:18px;"> </span><span style="font-size:24px;"><add key="mondoDbConnection" value=" . . ." /></span>
首先是页面的代码
<span style="font-size:24px;"><html> <head> <script> function showImg() { var actions = "DOWNLOAD"; var ImgInfo = "Penguins.jpg";//这是是已经上传到数据库中的图片的名称 window.location.href="/UpImg/ProcessRequest?actions=DOWNLOAD&value=" + ImgInfo; } </script> </head> <body> <div> @*找到ProcessRequest,通过获取Action值来执行操作*@ @using (Html.BeginForm("ProcessRequest", "UpImg", new { actions = "UPLOAD" }, FormMe thod.Post, new { enctype = "multipart/form-data" })) { <input type="file" name="file" id="file" style="font-size:20px;" /> <input type="submit" value="上传" style="font-size:20px" /> } <input type="button" value="下载" style="font-size:20px" onclick="showImg()"/> </div> </body> </html></span><span style="font-size:18px;"> </span>
在Controller中
<span style="font-size:24px;">using MongoDB.Bson;using MongoDB.Driver.GridFS;using MongoDB.Driver public class UpImgController : Controller { private static MongoDatabase DB;//用于访问MongoDB数据库和设置 public static string fileTable = "files"; public void ProcessRequest() { link(); //从MVC传值,获取 string action = Request.QueryString["actions"]; //通过action值来判断是上传、获取还是下载 switch (action) { case "DOWNLOAD": DownFile(); break;//下载文件 case "UPLOAD": Upload(); break;//上传 } } #region 链接数据库的设置 /// <summary> /// 连接数据库设置 /// </summary> public void link() { //使用AppSettings方式和配置文件连接,类似机房收费系统中链接数据库的方法 // string ConnectionString = ConfigurationManager.AppSettings["mondoDbConnection"]; //连接本地的数据库 string ConnectionString = "127.0.0.1"; //连接不成功,提示 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("test");//创建数据库链接,其中的字符串DB3是指数据库的名称,如果没有的话或创建一个 DB = server.GetDatabase("DB3");//创建数据库链接,其中的字符串DB3是指数据库的名称,如果没有的话或创建一个 } #endregion #region 上传文件 /// <summary> /// 上传文件 /// </summary> public void Upload() { try { HttpPostedFileBase file = (HttpPostedFileBase)Request.Files["file"];//获得上传的文件 int nFileLen = file.ContentLength;//获取上传文件的长度 string nFileName = file.FileName;//获取上传文件的值 //利用GridFSB创建 MongoGridFSSettings fsSetting = new MongoGridFSSettings() { Root = fileTable }; MongoGridFS fs = new MongoGridFS(DB, fsSetting); byte[] myData = new Byte[nFileLen];//定义一个为文件长度的定长字节数组 file.InputStream.Read(myData, 0, nFileLen);//将输入流的nFileLen个数据字节读入到myData数组中 //代表创造GridFS文件时使用的选项。 MongoGridFSCreateOptions option = new MongoGridFSCreateOptions(); option.UploadDate = DateTime.Now; //创建文件,文件存储数据 using (MongoGridFSStream gfs = fs.Create(file.FileName, option)) { gfs.Write(myData, 0, nFileLen); gfs.Close(); Response.Write("<script>alert('上传成功!');window.location.href='/UpImg/Index'</script>"); } } catch (Exception e) { Response.Write("抱歉上传失败!" + e.Message); } } #endregion #region 下载文件 /// <summary> /// 下载文件方法 /// </summary> public void DownFile() { try { //获取文件值 string filename = Request.QueryString["value"]; //获取文件类型 Response.ContentType = "application/octet-stream"; //文件名 Response.AddHeader("Content-Disposition", "attachment; filename=" + filename); //获取图片名 MongoGridFSSettings fsSetting = new MongoGridFSSettings() { Root = fileTable }; //通过文件名去数据库查值 MongoGridFS fs = new MongoGridFS(DB, fsSetting); MongoGridFSFileInfo gfInfo = new MongoGridFSFileInfo(fs, filename); fs.Download(Response.OutputStream, filename); Response.End(); } catch (Exception e) { Response.Write("抱歉下载失败!" + e.Message); } } #endregion }}</span>
小结
初步接触到MongoDB,在做Demo的过程中感觉和刚开始在做机房收费时使用SQLServer的过程是相似,首先是建立连接,然后开始写方法在库中进行增产改查,然后键链接关闭。而后我们对这一系列的操作封装使得使用的方便,而后对数据库在面向对象思想的基础上使用EF进行操作,猜想Mongo也会存在这样的一个过程,实践中继续验证。
0 0
- Mongo中上传下载图片
- ASP.NET2.0中全面实现文件图片上传下载处理
- android webservice 上传下载图片
- silverlight 图片上传下载
- Struts2图片的上传下载
- Java上传下载图片
- 原始上传下载图片
- Mongo中id介绍
- Mongo中id介绍
- ubuntu中安装mongo
- webservice 上传下载文件,图片(转贴)
- ftp图片上传下载带进度条
- 多图片(文件)上传下载
- Android上传下载文件(图片)
- 图片上传下载注意+下拉条多选
- .Net Core 图片文件上传下载
- .Net Core 图片文件上传下载
- 图片上传下载代码命名唯一
- PAT1002.写出这个数
- 快速掌握Lua 5.3 —— 环境
- atomic提供原子操作的类
- hdu 2078
- 一个资深iOS开发者对于React Native的看法
- Mongo中上传下载图片
- web.xml配置详解
- 关于Struts2中的No result defined for action and result input错误
- 二手吧软件学习build.xml
- 设计一个二次方程计算器
- LIMIT
- group by
- solr在windows下的安装及配置
- linux中shell变量$#,$@,$0,$1,$2的含义解释