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

  • 相关阅读:
    Java学习二十九天
    Java学习二十八天
    47. Permutations II 全排列可重复版本
    46. Permutations 全排列,无重复
    subset ii 子集 有重复元素
    339. Nested List Weight Sum 339.嵌套列表权重总和
    251. Flatten 2D Vector 平铺二维矩阵
    217. Contains Duplicate数组重复元素
    209. Minimum Size Subarray Sum 结果大于等于目标的最小长度数组
    438. Find All Anagrams in a String 查找字符串中的所有Anagrams
  • 原文地址:https://www.cnblogs.com/hsiang/p/15388088.html
Copyright © 2011-2022 走看看