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 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转换成流数据,并保存为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数据:

查找图片:

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

(0)

相关推荐

  • .NET连接MongoDB数据库实例教程

    使用代码 让我们从Mongo数据库的一些细节和基本命令开始,并最终介绍如何创建一个可连接至Mongo数据库的.NET Windows应用. Mongo数据库 MongoDB 是一个跨平台.文档导向的数据库系统,它被归类为"NoSQL"数据库.MongoDB避开了传统的基于表的关系数据库结构,而是使用了带动态模式的类JSON文档.MongoDB将这种格式称为BSON(二进制JSON).这种动态模式使得特定类型应用中的数据整合更简单.更快速.MongoDB是自由且开源的软件. Mongo数

  • ASP.NET MVC4使用MongoDB制作相册管理

    ASP.NET MVC4使用MongoDB制作相册管理实例分享 TIPS:1.Image转成Base64保存到mongodb字段          2.数据模型是嵌套的关联 首先定义Model层:  public class Photo : IEquatable<Photo> { [Required] public string PhotoName { get; set; } [Required] public string PhotoDescription { get; set; } pub

  • 在.Net中使用MongoDB的方法教程

    什么是MongoDB MongoDB是基于文档的存储的(而非表),是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的.他支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型.Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引.Mongo主要解决的是海量数据的访问效率问题.因为Mongo主要是支持海量数据存储的,所以M

  • 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"); #re

  • express+mongoose实现对mongodb增删改查操作详解

    本文实例讲述了express+mongoose实现对mongodb增删改查操作.分享给大家供大家参考,具体如下: 项目地址:https://github.com/jrainlau/mongoose_crud 写在开头 本文主要分享我如何使用express+mongoose对mongodb实现增删改查操作,感谢cnode社区所有精品文章的帮助,以及@airuikun的开源项目airuikun/mongoose_crud对我的启发. 学习nodejs已经小半个月了,一直琢磨着做一些什么东西出来.由于

  • PHP操作MongoDB实现增删改查功能【附php7操作MongoDB方法】

    本文实例讲述了PHP操作MongoDB实现增删改查功能.分享给大家供大家参考,具体如下: MongoDB的PHP驱动提供了一些核心类来操作MongoDB,总的来说MongoDB命令行中有的功能,它都可以实现,而且参数的格式基本相似.PHP7以前的版本和PHP7之后的版本对MongoDB的操作有所不同,本文主要以PHP7以前版本为例讲解PHP对MongoDB的各种操作,最后再简单说明一下PHP7以后版本对MongoDB的操作. 一.数据插入 //insert() //参数1:一个数组或对象 //参

  • java连接mongoDB并进行增删改查操作实例详解

    本文实例讲述了java连接mongoDB并进行增删改查操作.分享给大家供大家参考,具体如下: 1.安装 MongoDB JDBC驱动程序 在java中使用mongoDB之前,首先需要拥有java连接mongoDB的第三方驱动包(jar包) 1)maven项目可通过在pom.xml中添加依赖 <dependencies> <dependency> <groupId>org.mongodb</groupId> <artifactId>mongo-ja

  • thinkphp3.2.3版本的数据库增删改查实现代码

    框架thinkphp 版本:3.2.3 内容:数据库操作 1. 多表查找一条数据 M('a表')->join("b表 on b表.id=a表.id")->where('条件')->find(); 2.查找一条数据 M('a表')->where('条件')->find(); 3.多表查询所有数据 M('a表')->join("b表 on b表.id=a表.id")->where('条件')->select(); 4.查询

  • Java连接MongoDB进行增删改查的操作

    Java连接MongoDB进行增删改查的操作 1.创建数据库的连接,进行增删改查 (分别为接口和实现类) package com.dao; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.data.mo

  • Android编程连接MongoDB及增删改查等基本操作示例

    本文实例讲述了Android编程连接MongoDB及增删改查等基本操作.分享给大家供大家参考,具体如下: MongoDB简介 Mongodb,分布式文档存储数据库,由C++语言编写,旨在为WEB应用提供可扩展的高性能数据存储解决方案.MongoDB是一个高性能,开源,无模式的文档型数据库,是当前NoSql数据库中比较热门的一种.它在许多场景下可用于替代传统的关系型数据库或键/值存储方式.Mongo使用C++开发. Mongo安装参考 1)下载安装包文件,解压到某一文件夹下. 官方下载地址:htt

  • nodejs操作mongodb的增删改查功能实例

    本文实例讲述了nodejs操作mongodb的增删改查功能.分享给大家供大家参考,具体如下: 安装相关模块 如果使用这个的话,你需要先自己安装一下他需要的模块,在根目录输入 npm install mongodb --save 进行模块安装,安装成功以后就可以进行以下的步骤. 文件的引入 以下是我书写的相关代码,放到你可以引用的相关目录,本人放到了express的根目录 function Mongo(options) { this.settings = { url: 'mongodb://loc

  • webpack4+express+mongodb+vue实现增删改查的示例

    在讲解之前,我们先来看看效果如下所示: 1)整个页面的效果如下: 2) 新增数据效果如下: 3) 新增成功如下: 4) 编辑数据效果如下: 5) 编辑成功效果如下: 6) 删除数据效果如下: 7) 删除成功效果如下: 8) 查询效果如下: 如上的效果,下面我们还是和之前一样,先看看我们整个项目的架构如下所示: ### 目录结构如下: demo1 # 工程名 | |--- dist # 打包后生成的目录文件 | |--- node_modules # 所有的依赖包 | |----database

  • Node.js对MongoDB进行增删改查操作的实例代码

    MongoDB简介 MongoDB是一个开源的.文档型的NoSQL数据库程序.MongoDB将数据存储在类似JSON的文档中,操作起来更灵活方便.NoSQL数据库中的文档(documents)对应于SQL数据库中的一行.将一组文档组合在一起称为集合(collections),它大致相当于关系数据库中的表. 除了作为一个NoSQL数据库,MongoDB还有一些自己的特性: •易于安装和设置 •使用BSON(类似于JSON的格式)来存储数据 •将文档对象映射到应用程序代码很容易 •具有高度可伸缩性和

随机推荐