• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    MongoDB.NET 2.2.4驱动版本对Mongodb3.3数据库中GridFS增删改查

    本文实例为大家分享了针对Mongodb3.3数据库中GridFS增删改查,供大家参考,具体内容如下

    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获取当前应用程序集的执行目录的上级的上级目录 
      //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转换成流数据,并保存为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()会改变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; 
     } 
     
     //参数是图片的路径 
     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\")); //在当前程序集目录中添加指定目录DownLoadImg 
      System.IO.Directory.CreateDirectory(info.FullName); 
      File.WriteAllBytes(info+file, buffer); 
      return file; 
     } 
     } 
    } 
    

    LogHelper.cs代码如下:

    /// summary> 
     /// 手动记录错误日志,不用Log4Net组件 
     /// /summary> 
     public class LogHelper 
     { 
     /// summary> 
     /// 将日志写入指定的文件 
     /// /summary> 
     /// param name="Path">文件路径,如果没有该文件,刚创建/param> 
     /// param name="content">日志内容/param> 
     public static void WriteFile(string content) 
     { 
      string Path = AppDomain.CurrentDomain.BaseDirectory + "Log"; 
      if (!Directory.Exists(Path)) 
      { 
      //若文件目录不存在 则创建 
      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("时间:" + DateTime.Now.ToString()); 
      writer.WriteLine("日志信息:" + content); 
      writer.WriteLine("-----------------------------------------------------------"); 
      writer.Close(); 
      writer.Dispose(); 
     } 
     
     /// summary> 
     /// 将日志写入指定的文件 
     /// /summary> 
     /// param name="Path">文件路径,如果没有该文件,刚创建/param> 
     /// param name="content">日志内容/param> 
     public static void WriteFile(int content) 
     { 
      string Path = AppDomain.CurrentDomain.BaseDirectory + "Log"; 
      if (!Directory.Exists(Path)) 
      { 
      //若文件目录不存在 则创建 
      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("时间:" + DateTime.Now.ToString()); 
      writer.WriteLine("日志信息:" + content); 
      writer.WriteLine("-----------------------------------------------------------"); 
      writer.Close(); 
      writer.Dispose(); 
     } 
     
     
     /// summary> 
     /// 将日志写入指定的文件 
     /// /summary> 
     /// param name="erroMsg">错误详细信息/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)) 
      { 
      //若文件目录不存在 则创建 
      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("时间:" + DateTime.Now.ToString()); 
      writer.WriteLine("文件:" + fileName); 
      writer.WriteLine("源:" + source); 
      writer.WriteLine("错误信息:" + erroMsg); 
      writer.WriteLine("-----------------------------------------------------------"); 
      writer.Close(); 
      writer.Dispose(); 
     } 
     } 
    

    结果如下:

    Mongodb数据:

    查找图片:

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

    您可能感兴趣的文章:
    • MongoDB服务端JavaScript脚本使用方法
    • mongoDB中CRUD的深入讲解
    • Mongo DB增删改查命令
    • mongodb+php实现简单的增删改查
    • PHP简单操作MongoDB的方法(安装及增删改查)
    • mongodb增删改查详解_动力节点Java学院整理
    • MongoDB简单操作示例【连接、增删改查等】
    • koa+mongoose实现简单增删改查接口的示例代码
    • Node.js对MongoDB进行增删改查操作的实例代码
    • java连接Mongodb实现增删改查
    • MongoDB的基本操作实例详解【服务端启动,客户端连接,CRUD操作】
    上一篇:MongoDB的安装方法图文教程
    下一篇:在Linux ubuntu下安装mongodb的方法
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    MongoDB.NET 2.2.4驱动版本对Mongodb3.3数据库中GridFS增删改查 MongoDB.NET,2.2.4,驱动,版本,