MongoDB系列文章之C#玩转它(2/3)

在前一篇文章中,已经简述了如何通过C#进行MongoDB基本数据类型的存储及读取,那么文件如何在MongoDB中进行存储呢?本文主要以一个简单的小例子,简述如何通过MongoDB进行图片文件的存储及读写,仅供学习分享使用,如有不足之处,还请指正。.

涉及知识点


MongoDB有一种数据类型Binary,主要用于存储二进制数据,所以我们可以利用二进制进行一些小文件(<16M)的存储。本文主要通过将图片转换成二进制数据,然后再保存在MongoDB中,读取时再将二进制文件转换成图片予以展示。

示例截图


示例虽小,但已包含了对MongoDB的增删改查,具体如下:

1. 本例主要是将MongoDB中的图片信息读取并展示成列表,然后选择列表中的名称,并展示图片明细。

2. 通过新增功能往数据库中保存图片。

1. 查询功能

MongoDB系列文章之C#玩转它(2/3)

2. 新增功能

MongoDB系列文章之C#玩转它(2/3)

核心代码


关于前文提到的MongoHelper类是可以通用的,无需做任何修改,此处不再赘述,可参考前一篇文章。首先新增一个图片Model类,定义数据结构,如下所示:

using MongoDB.Bson;using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;
namespace DemoMongo{    public class Photo    {        /// <summary>        /// 唯一ID        /// </summary>        public ObjectId Id { get; set; }
        /// <summary>        /// 图片名称        /// </summary>        public string name { get; set; }
        /// <summary>        /// 图片类型        /// </summary>        public string suffix { get; set; }
        /// <summary>        /// 图片大小        /// </summary>        public int size { get; set; }
        /// <summary>        /// 图片内容        /// </summary>        public byte[] content { get; set; }    }}

保存时读取图片的二进制数据,赋值给Phtoto,然后进行保存即可,如下所示:

/// <summary>/// 保存/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void btnSave_Click(object sender, EventArgs e){  string filePath = this.txtPath.Text;  if (!string.IsNullOrEmpty(filePath))  {    FileInfo info = new FileInfo(filePath);
    Photo photo = new Photo()    {      Id = ObjectId.GenerateNewId(DateTime.Now),      name = Path.GetFileName(filePath),      suffix = Path.GetExtension(filePath),      size = int.Parse(info.Length.ToString()),      content = File.ReadAllBytes(filePath)    };    this.helper.Insert(photo);    MessageBox.Show("插入成功");  }  else {    MessageBox.Show("请先选择文件");  }}

读取时,将二进制数据转换成图片,并在PictureBox上展示,如下所示:

private void dgView_CellClick(object sender, DataGridViewCellEventArgs e){  //只有当第0列被点击时才生效  if (e.ColumnIndex == 0)  {    byte[] content = ((Photo)dgView.CurrentRow.DataBoundItem).content;    MemoryStream ms = new MemoryStream(content);    this.pbContent.Image=Image.FromStream(ms);    this.pbContent.SizeMode = PictureBoxSizeMode.StretchImage;  }}

MongoDB数据示例


在MongoDB中,数据存储如下所示:

MongoDB系列文章之C#玩转它(2/3)

以上就是将图片文件保存到MongoDB中的相关代码,旨在抛砖引玉,共同进步。