C# 玩转MongoDB(二)
2021/10/10 16:52:37
本文主要是介绍C# 玩转MongoDB(二),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
在前一篇文章中,已经简述了如何通过C#进行MongoDB基本数据类型的存储及读取,那么文件如何在MongoDB中进行存储呢?本文主要以一个简单的小例子,简述如何通过MongoDB进行图片文件的存储及读写,仅供学习分享使用,如有不足之处,还请指正。
涉及知识点
MongoDB有一种数据类型Binary,主要用于存储二进制数据,所以我们可以利用二进制进行一些小文件(<16M)的存储。本文主要通过将图片转换成二进制数据,然后再保存在MongoDB中,读取时再将二进制文件转换成图片予以展示。
示例截图
示例虽小,但已包含了对MongoDB的增删改查,具体如下:
1. 本例主要是将MongoDB中的图片信息读取并展示成列表,然后选择列表中的名称,并展示图片明细。
2. 通过新增功能往数据库中保存图片。
查询功能
新增功能
核心代码
关于前文提到的MongoHelper类是可以通用的,无需做任何修改,此处不再赘述,可参考前一篇文章。首先新增一个图片Model类,定义数据结构,如下所示:
1 using MongoDB.Bson; 2 using System; 3 using System.Collections.Generic; 4 using System.Linq; 5 using System.Text; 6 using System.Threading.Tasks; 7 8 namespace DemoMongo 9 { 10 public class Photo 11 { 12 /// <summary> 13 /// 唯一ID 14 /// </summary> 15 public ObjectId Id { get; set; } 16 17 /// <summary> 18 /// 图片名称 19 /// </summary> 20 public string name { get; set; } 21 22 /// <summary> 23 /// 图片类型 24 /// </summary> 25 public string suffix { get; set; } 26 27 /// <summary> 28 /// 图片大小 29 /// </summary> 30 public int size { get; set; } 31 32 /// <summary> 33 /// 图片内容 34 /// </summary> 35 public byte[] content { get; set; } 36 } 37 }
保存时读取图片的二进制数据,赋值给Phtoto,然后进行保存即可,如下所示:
1 /// <summary> 2 /// 保存 3 /// </summary> 4 /// <param name="sender"></param> 5 /// <param name="e"></param> 6 private void btnSave_Click(object sender, EventArgs e) 7 { 8 string filePath = this.txtPath.Text; 9 if (!string.IsNullOrEmpty(filePath)) 10 { 11 FileInfo info = new FileInfo(filePath); 12 13 Photo photo = new Photo() 14 { 15 Id = ObjectId.GenerateNewId(DateTime.Now), 16 name = Path.GetFileName(filePath), 17 suffix = Path.GetExtension(filePath), 18 size = int.Parse(info.Length.ToString()), 19 content = File.ReadAllBytes(filePath) 20 }; 21 this.helper.Insert(photo); 22 MessageBox.Show("插入成功"); 23 } 24 else { 25 MessageBox.Show("请先选择文件"); 26 } 27 }
读取时,将二进制数据转换成图片,并在PictureBox上展示,如下所示:
1 private void dgView_CellClick(object sender, DataGridViewCellEventArgs e) 2 { 3 //只有当第0列被点击时才生效 4 if (e.ColumnIndex == 0) 5 { 6 byte[] content = ((Photo)dgView.CurrentRow.DataBoundItem).content; 7 MemoryStream ms = new MemoryStream(content); 8 this.pbContent.Image=Image.FromStream(ms); 9 this.pbContent.SizeMode = PictureBoxSizeMode.StretchImage; 10 } 11 }
MongoDB数据示例
在MongoDB中,数据存储如下所示:
以上就是将图片文件保存到MongoDB中的相关代码,旨在抛砖引玉,共同进步,关于大文件的存储,可在下一篇讲解。
备注
木兰花·燕鸿过后莺归去
【作者】晏殊 【朝代】宋 燕鸿过后莺归去。细算浮生千万绪。长于春梦几多时,散似秋云无觅处。闻琴解佩神仙侣。挽断罗衣留不住。劝君莫作独醒人,烂醉花间应有数。
这篇关于C# 玩转MongoDB(二)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2022-03-01沐雪多租宝商城源码从.NetCore3.1升级到.Net6的步骤
- 2024-11-18微软研究:RAG系统的四个层次提升理解与回答能力
- 2024-11-15C#中怎么从PEM格式的证书中提取公钥?-icode9专业技术文章分享
- 2024-11-14云架构设计——如何用diagrams.net绘制专业的AWS架构图?
- 2024-05-08首个适配Visual Studio平台的国产智能编程助手CodeGeeX正式上线!C#程序员必备效率神器!
- 2024-03-30C#设计模式之十六迭代器模式(Iterator Pattern)【行为型】
- 2024-03-29c# datetime tryparse
- 2024-02-21list find index c#
- 2024-01-24convert toint32 c#
- 2024-01-24Advanced .Net Debugging 1:你必须知道的调试工具