本文實(shí)例為大家分享了針對(duì)Mongodb3.3數(shù)據(jù)庫中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 IMongoCollectionBsonDocument> 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.GetCollectionBsonDocument>(collectionName); } //this.collection = new MongoClient(url).GetDatabase(db).GetCollectionBsonDocument>(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(IMongoCollectionBsonDocument> 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 = BuildersGridFSFileInfo>.Filter.And( BuildersGridFSFileInfo>.Filter.Eq(x => x.Filename, "man"), BuildersGridFSFileInfo>.Filter.Gte(x => x.UploadDateTime, new DateTime(2015, 1, 1, 0, 0, 0, DateTimeKind.Utc)), BuildersGridFSFileInfo>.Filter.Lt(x => x.UploadDateTime, new DateTime(2017, 2, 1, 0, 0, 0, DateTimeKind.Utc))); var sort = BuildersGridFSFileInfo>.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 = BuildersGridFSFileInfo>.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> /// 將日志寫入指定的文件 /// /summary> /// param name="Path">文件路徑,如果沒有該文件,剛創(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> /// 將日志寫入指定的文件 /// /summary> /// param name="Path">文件路徑,如果沒有該文件,剛創(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> /// 將日志寫入指定的文件 /// /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ù):
查找圖片:
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
標(biāo)簽:雞西 廈門 遼陽 興安盟 無錫 泰安 玉林 自貢
巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《MongoDB.NET 2.2.4驅(qū)動(dòng)版本對(duì)Mongodb3.3數(shù)據(jù)庫中GridFS增刪改查》,本文關(guān)鍵詞 MongoDB.NET,2.2.4,驅(qū)動(dòng),版本,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。