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中的相關代碼,旨在拋磚引玉,共同進步,關於大文件的存儲,可在下一篇講解。

備注

木蘭花·燕鴻過后鶯歸去

【作者】晏殊  【朝代】宋
 
燕鴻過后鶯歸去。細算浮生千萬緒。長於春夢幾多時,散似秋雲無覓處。
聞琴解佩神仙侶。挽斷羅衣留不住。勸君莫作獨醒人,爛醉花間應有數。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM