zoukankan      html  css  js  c++  java
  • 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中的相关代码,旨在抛砖引玉,共同进步,关于大文件的存储,可在下一篇讲解。

    备注

    木兰花·燕鸿过后莺归去

    【作者】晏殊 【朝代】宋
     
    燕鸿过后莺归去。细算浮生千万绪。长于春梦几多时,散似秋云无觅处。
    闻琴解佩神仙侣。挽断罗衣留不住。劝君莫作独醒人,烂醉花间应有数。


    作者:Alan.hsiang
    出处:http://www.cnblogs.com/hsiang/
    本文版权归作者和博客园共有,写文不易,支持原创,欢迎转载【点赞】,转载请保留此段声明,且在文章页面明显位置给出原文连接,谢谢。
    关注个人公众号,定时同步更新技术及职场文章

  • 相关阅读:
    php的错误处理机制
    php的自动加载函数spl_autoload_register和__autoload
    mysql日志配置
    01,易语言网页填表
    mac 的全文搜索
    react native 热更新
    码云的使用教程
    autolayout实现水平三等分
    mac命令行快捷键
    什么是延展性(Malleability,可鍛性)
  • 原文地址:https://www.cnblogs.com/hsiang/p/15388088.html
Copyright © 2011-2022 走看看