在前一篇文章中,已經簡述了如何通過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/
本文著作權歸作者和博客園共有,寫文不易,支持原創,歡迎轉載【點贊】,轉載請保留此段宣告,且在文章頁面明顯位置給出原文連接,謝謝,
關注個人公眾號,定時同步更新技術及職場文章
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/307090.html
標籤:.NET技术
上一篇:WPF 簡單聊聊如何使用 DrawGlyphRun 繪制文本
下一篇:Dapr被點燃
