MongoDB.NET 2.2.4驅(qū)動(dòng)版本對(duì)Mongodb3.3數(shù)據(jù)庫(kù)中GridFS增刪改查
本文實(shí)例為大家分享了針對(duì)Mongodb3.3數(shù)據(jù)庫(kù)中GridFS增刪改查,供大家參考,具體內(nèi)容如下
Program.cs代碼如下:
internal class Program { private static void Main(string[] args) { GridFSHelper helper = new GridFSHelper("mongodb://localhost", "GridFSDemo", "Pictures"); #region 上傳圖片 //第一種 //Image image = Image.FromFile("D:\\dog.jpg"); //byte[] imgdata = ImageHelper.ImageToBytes(image); //ObjectId oid = helper.UploadGridFSFromBytes(imgdata); //第二種 //Image image = Image.FromFile("D:\\man.jpg"); //Stream imgSteam = ImageHelper.ImageToStream(image); //ObjectId oid = helper.UploadGridFSFromStream("man",imgSteam); //LogHelper.WriteFile(oid.ToString()); // Console.Write(oid.ToString()); #endregion #region 下載圖片 //第一種 //ObjectId downId = new ObjectId("578e2d17d22aed1850c7855d"); //byte[] Downdata= helper.DownloadAsByteArray(downId); //string name= ImageHelper.CreateImageFromBytes("coolcar",Downdata); //第二種 // byte[] Downdata = helper.DownloadAsBytesByName("QQQ"); //string name = ImageHelper.CreateImageFromBytes("dog", Downdata); //第三種 //byte[] Downdata = helper.DownloadAsBytesByName("QQQ"); //Image img = ImageHelper.BytesToImage(Downdata); //string path = Path.GetFullPath(@"../../DownLoadImg/") + DateTime.Now.ToString("yyyyMMddHHmmssfff") + ".jpg"; ////使用path獲取當(dāng)前應(yīng)用程序集的執(zhí)行目錄的上級(jí)的上級(jí)目錄 //img.Save(path, System.Drawing.Imaging.ImageFormat.Jpeg); #endregion #region 查找圖片 GridFSFileInfo gridFsFileInfo = helper.FindFiles("man"); Console.WriteLine(gridFsFileInfo.Id); #endregion #region 刪除圖片 //helper.DroppGridFSBucket(); #endregion Console.ReadKey(); } }
GridFSHelper.cs的代碼如下:
using System; using System.Collections.Generic; using System.Configuration; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using MongoDB.Bson; using MongoDB.Driver; using MongoDB.Driver.GridFS; namespace MongoDemo { public class GridFSHelper { private readonly IMongoClient client; private readonly IMongoDatabase database; private readonly IMongoCollection<BsonDocument> collection; private readonly GridFSBucket bucket; private GridFSFileInfo fileInfo; private ObjectId oid; public GridFSHelper() : this( ConfigurationManager.AppSettings["mongoQueueUrl"], ConfigurationManager.AppSettings["mongoQueueDb"], ConfigurationManager.AppSettings["mongoQueueCollection"]) { } public GridFSHelper(string url, string db, string collectionName) { if (url == null) { throw new ArgumentNullException("url"); } else { client = new MongoClient(url); } if (db == null) { throw new ArgumentNullException("db"); } else { database = client.GetDatabase(db); } if (collectionName == null) { throw new ArgumentNullException("collectionName"); } else { collection = database.GetCollection<BsonDocument>(collectionName); } //this.collection = new MongoClient(url).GetDatabase(db).GetCollection<BsonDocument>(collectionName); GridFSBucketOptions gfbOptions = new GridFSBucketOptions() { BucketName = "bird", ChunkSizeBytes = 1*1024*1024, ReadConcern = null, ReadPreference = null, WriteConcern = null }; var bucket = new GridFSBucket(database, new GridFSBucketOptions { BucketName = "videos", ChunkSizeBytes = 1048576, // 1MB WriteConcern = WriteConcern.WMajority, ReadPreference = ReadPreference.Secondary }); this.bucket = new GridFSBucket(database, null); } public GridFSHelper(IMongoCollection<BsonDocument> collection) { if (collection == null) { throw new ArgumentNullException("collection"); } this.collection = collection; this.bucket = new GridFSBucket(collection.Database); } public ObjectId UploadGridFSFromBytes(string filename, Byte[] source) { oid = bucket.UploadFromBytes(filename, source); return oid; } public ObjectId UploadGridFSFromStream(string filename,Stream source) { using (source) { oid = bucket.UploadFromStream(filename, source); return oid; } } public Byte[] DownloadAsByteArray(ObjectId id) { Byte[] bytes = bucket.DownloadAsBytes(id); return bytes; } public Stream DownloadToStream(ObjectId id) { Stream destination = new MemoryStream(); bucket.DownloadToStream(id, destination); return destination; } public Byte[] DownloadAsBytesByName(string filename) { Byte[] bytes = bucket.DownloadAsBytesByName(filename); return bytes; } public Stream DownloadToStreamByName(string filename) { Stream destination = new MemoryStream(); bucket.DownloadToStreamByName(filename, destination); return destination; } public GridFSFileInfo FindFiles(string filename) { var filter = Builders<GridFSFileInfo>.Filter.And( Builders<GridFSFileInfo>.Filter.Eq(x => x.Filename, "man"), Builders<GridFSFileInfo>.Filter.Gte(x => x.UploadDateTime, new DateTime(2015, 1, 1, 0, 0, 0, DateTimeKind.Utc)), Builders<GridFSFileInfo>.Filter.Lt(x => x.UploadDateTime, new DateTime(2017, 2, 1, 0, 0, 0, DateTimeKind.Utc))); var sort = Builders<GridFSFileInfo>.Sort.Descending(x => x.UploadDateTime); var options = new GridFSFindOptions { Limit = 1, Sort = sort }; using (var cursor = bucket.Find(filter, options)) { fileInfo = cursor.ToList().FirstOrDefault(); } return fileInfo; } public void DeleteAndRename(ObjectId id) { bucket.Delete(id); } //The “fs.files” collection will be dropped first, followed by the “fs.chunks” collection. This is the fastest way to delete all files stored in a GridFS bucket at once. public void DroppGridFSBucket() { bucket.Drop(); } public void RenameAsingleFile(ObjectId id,string newFilename) { bucket.Rename(id, newFilename); } public void RenameAllRevisionsOfAfile(string oldFilename,string newFilename) { var filter = Builders<GridFSFileInfo>.Filter.Eq(x => x.Filename, oldFilename); var filesCursor = bucket.Find(filter); var files = filesCursor.ToList(); foreach (var file in files) { bucket.Rename(file.Id, newFilename); } } } }
ImageHelper.cs的代碼如下:
using System; using System.Collections.Generic; using System.Drawing; using System.Drawing.Imaging; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; namespace MongoDemo { public static class ImageHelper { /// <summary> /// //將Image轉(zhuǎn)換成流數(shù)據(jù),并保存為byte[] /// </summary> /// <param name="image"></param> /// <returns></returns> public static byte[] ImageToBytes(Image image) { ImageFormat format = image.RawFormat; using (MemoryStream ms = new MemoryStream()) { if (format.Equals(ImageFormat.Jpeg)) { image.Save(ms, ImageFormat.Jpeg); } else if (format.Equals(ImageFormat.Png)) { image.Save(ms, ImageFormat.Png); } else if (format.Equals(ImageFormat.Bmp)) { image.Save(ms, ImageFormat.Bmp); } else if (format.Equals(ImageFormat.Gif)) { image.Save(ms, ImageFormat.Gif); } else if (format.Equals(ImageFormat.Icon)) { image.Save(ms, ImageFormat.Icon); } byte[] buffer = new byte[ms.Length]; //Image.Save()會(huì)改變MemoryStream的Position,需要重新Seek到Begin ms.Seek(0, SeekOrigin.Begin); ms.Read(buffer, 0, buffer.Length); return buffer; } } public static Stream ImageToStream(Image image) { ImageFormat format = image.RawFormat; MemoryStream ms = new MemoryStream(); if (format.Equals(ImageFormat.Jpeg)) { image.Save(ms, ImageFormat.Jpeg); } else if (format.Equals(ImageFormat.Png)) { image.Save(ms, ImageFormat.Png); } else if (format.Equals(ImageFormat.Bmp)) { image.Save(ms, ImageFormat.Bmp); } else if (format.Equals(ImageFormat.Gif)) { image.Save(ms, ImageFormat.Gif); } else if (format.Equals(ImageFormat.Icon)) { image.Save(ms, ImageFormat.Icon); } return ms; } //參數(shù)是圖片的路徑 public static byte[] GetPictureData(string imagePath) { FileStream fs = new FileStream(imagePath, FileMode.Open); byte[] byteData = new byte[fs.Length]; fs.Read(byteData, 0, byteData.Length); fs.Close(); return byteData; } /// <summary> /// Convert Byte[] to Image /// </summary> /// <param name="buffer"></param> /// <returns></returns> public static Image BytesToImage(byte[] buffer) { MemoryStream ms = new MemoryStream(buffer); Image image = System.Drawing.Image.FromStream(ms); return image; } /// <summary> /// Convert Byte[] to a picture and Store it in file /// </summary> /// <param name="fileName"></param> /// <param name="buffer"></param> /// <returns></returns> public static string CreateImageFromBytes(string fileName, byte[] buffer) { string file = fileName; Image image = BytesToImage(buffer); ImageFormat format = image.RawFormat; if (format.Equals(ImageFormat.Jpeg)) { file += ".jpg"; } else if (format.Equals(ImageFormat.Png)) { file += ".png"; } else if (format.Equals(ImageFormat.Bmp)) { file += ".bmp"; } else if (format.Equals(ImageFormat.Gif)) { file += ".gif"; } else if (format.Equals(ImageFormat.Icon)) { file += ".icon"; } System.IO.FileInfo info = new System.IO.FileInfo(Path.GetFullPath(@"DownLoadImg\")); //在當(dāng)前程序集目錄中添加指定目錄DownLoadImg System.IO.Directory.CreateDirectory(info.FullName); File.WriteAllBytes(info+file, buffer); return file; } } }
LogHelper.cs代碼如下:
/// <summary> /// 手動(dòng)記錄錯(cuò)誤日志,不用Log4Net組件 /// </summary> public class LogHelper { /// <summary> /// 將日志寫(xiě)入指定的文件 /// </summary> /// <param name="Path">文件路徑,如果沒(méi)有該文件,剛創(chuàng)建</param> /// <param name="content">日志內(nèi)容</param> public static void WriteFile(string content) { string Path = AppDomain.CurrentDomain.BaseDirectory + "Log"; if (!Directory.Exists(Path)) { //若文件目錄不存在 則創(chuàng)建 Directory.CreateDirectory(Path); } Path += "\\" + DateTime.Now.ToString("yyMMdd") + ".log"; if (!File.Exists(Path)) { File.Create(Path).Close(); } StreamWriter writer = new StreamWriter(Path, true, Encoding.GetEncoding("gb2312")); writer.WriteLine("時(shí)間:" + DateTime.Now.ToString()); writer.WriteLine("日志信息:" + content); writer.WriteLine("-----------------------------------------------------------"); writer.Close(); writer.Dispose(); } /// <summary> /// 將日志寫(xiě)入指定的文件 /// </summary> /// <param name="Path">文件路徑,如果沒(méi)有該文件,剛創(chuàng)建</param> /// <param name="content">日志內(nèi)容</param> public static void WriteFile(int content) { string Path = AppDomain.CurrentDomain.BaseDirectory + "Log"; if (!Directory.Exists(Path)) { //若文件目錄不存在 則創(chuàng)建 Directory.CreateDirectory(Path); } Path += "\\" + DateTime.Now.ToString("yyMMdd") + ".log"; if (!File.Exists(Path)) { File.Create(Path).Close(); } StreamWriter writer = new StreamWriter(Path, true, Encoding.GetEncoding("gb2312")); writer.WriteLine("時(shí)間:" + DateTime.Now.ToString()); writer.WriteLine("日志信息:" + content); writer.WriteLine("-----------------------------------------------------------"); writer.Close(); writer.Dispose(); } /// <summary> /// 將日志寫(xiě)入指定的文件 /// </summary> /// <param name="erroMsg">錯(cuò)誤詳細(xì)信息</param> /// <param name="source">源位置</param> /// <param name="fileName">文件名</param> public static void WriteFile(string erroMsg, string source, string stackTrace, string fileName) { string Path = AppDomain.CurrentDomain.BaseDirectory + "Log"; if (!Directory.Exists(Path)) { //若文件目錄不存在 則創(chuàng)建 Directory.CreateDirectory(Path); } Path += "\\" + DateTime.Now.ToString("yyMMdd") + ".log"; if (!File.Exists(Path)) { File.Create(Path).Close(); } StreamWriter writer = new StreamWriter(Path, true, Encoding.GetEncoding("gb2312")); writer.WriteLine("時(shí)間:" + DateTime.Now.ToString()); writer.WriteLine("文件:" + fileName); writer.WriteLine("源:" + source); writer.WriteLine("錯(cuò)誤信息:" + erroMsg); writer.WriteLine("-----------------------------------------------------------"); writer.Close(); writer.Dispose(); } }
結(jié)果如下:
Mongodb數(shù)據(jù):
查找圖片:
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- MongoDB服務(wù)端JavaScript腳本使用方法
- mongoDB中CRUD的深入講解
- Mongo DB增刪改查命令
- mongodb+php實(shí)現(xiàn)簡(jiǎn)單的增刪改查
- PHP簡(jiǎn)單操作MongoDB的方法(安裝及增刪改查)
- mongodb增刪改查詳解_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
- MongoDB簡(jiǎn)單操作示例【連接、增刪改查等】
- koa+mongoose實(shí)現(xiàn)簡(jiǎn)單增刪改查接口的示例代碼
- Node.js對(duì)MongoDB進(jìn)行增刪改查操作的實(shí)例代碼
- java連接Mongodb實(shí)現(xiàn)增刪改查
- MongoDB的基本操作實(shí)例詳解【服務(wù)端啟動(dòng),客戶(hù)端連接,CRUD操作】
相關(guān)文章
Windows或Linux系統(tǒng)中備份和恢復(fù)MongoDB數(shù)據(jù)的教程
不得不說(shuō)MongoDB的備份回復(fù)操作對(duì)比其他數(shù)據(jù)庫(kù)來(lái)說(shuō)真的算得上是簡(jiǎn)便的,無(wú)論是在Windows的命令行中或者是Linux里的腳本執(zhí)行,這里我們就來(lái)看一下Windows或Linux系統(tǒng)中備份和恢復(fù)MongoDB數(shù)據(jù)的教程2016-06-06mongodb數(shù)據(jù)庫(kù)入門(mén)學(xué)習(xí)筆記之下載、安裝、啟動(dòng)、連接操作解析
這篇文章主要介紹了mongodb數(shù)據(jù)庫(kù)入門(mén)學(xué)習(xí)筆記之下載、安裝、啟動(dòng)、連接操作,結(jié)合簡(jiǎn)單示例形式分析了MongoDB數(shù)據(jù)庫(kù)的基本下載、解壓、啟動(dòng)服務(wù)、連接服務(wù)等相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下2019-10-10centos8安裝MongoDB的詳細(xì)過(guò)程
MongoDB由MongoDB Inc開(kāi)發(fā),并根據(jù)SSPL(服務(wù)器端公共許可證)進(jìn)行分發(fā),是一個(gè)開(kāi)源,跨平臺(tái),面向文檔的數(shù)據(jù)庫(kù)管理系統(tǒng),本文重點(diǎn)給大家介紹centos8安裝MongoDB的詳細(xì)過(guò)程,感興趣的朋友一起看看吧2021-10-10關(guān)于Mongodb 認(rèn)證鑒權(quán)你需要知道的一些事
最近因?yàn)閙ongodb被黑了,早先我就疑惑過(guò)怎么這東西開(kāi)啟服務(wù)就能用了,后來(lái)找了各方資料,知道MongoDB默認(rèn)是沒(méi)有鑒權(quán)的,所以這篇文章主要給大家介紹了關(guān)于Mongodb認(rèn)證鑒權(quán)你需要知道的一些事,需要的朋友可以參考下。2017-10-10Linux系統(tǒng)下安裝MongoDB的詳細(xì)方法圖文教程
這篇文章主要介紹了Linux系統(tǒng)下安裝MongoDB的詳細(xì)方法圖文教程,需要的朋友可以參考下2023-06-06MongoDB中查詢(xún)(find操作符)詳細(xì)指南
MongoDB是領(lǐng)先的NoSQL數(shù)據(jù)庫(kù)之一,以其快速的性能,靈活的模式,可伸縮性和強(qiáng)大的索引功能而聞名,下面這篇文章主要給大家介紹了關(guān)于MongoDB中查詢(xún)(find操作符)的相關(guān)資料,需要的朋友可以參考下2023-04-04mongodb監(jiān)控工具mongostat的使用及命令詳解
mongostat是mongodb自帶的狀態(tài)檢測(cè)工具,在命令行下使用,會(huì)間隔固定時(shí)間獲取mongodb的當(dāng)前運(yùn)行狀態(tài),并輸出,本文講述了mongodb監(jiān)控工具mongostat的使用及命令詳解2018-03-03Linux服務(wù)器快速安裝MongoDB5.0版本過(guò)程步驟
這篇文章主要為大家介紹了Linux服務(wù)器快速安裝MongoDB5.0版本過(guò)程步驟詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-12-12