MongoDB GridFS 对图片进行增删改

时间:2022-08-25 18:04:39
using MongoDB.Bson;
using MongoDB.Driver;
using MongoDB.Driver.Builders;
using MongoDB.Driver.GridFS;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions; namespace MongoDBImage
{
public class ImageClass
{
private static MongoDatabase DB;
public static string fileTable = "xiandb"; public void Init1()
{
MongoServer server = MongoServer.Create("mongodb://localhost:27017/?safe=true");
DB = server.GetDatabase("wangboDB");
} //获取图片
public void GetFileList(string queryName)
{
queryName = "wb";
Init1();
MongoGridFSSettings fsSetting = new MongoGridFSSettings() { Root = fileTable };
MongoGridFS fs = new MongoGridFS(DB, fsSetting); MongoCollection collection = DB.GetCollection(fileTable + ".files"); //排序方法-按照时间降序排列
SortByDocument sort = new SortByDocument {
{"filename", 1},
{"uploadDate", -1}
}; //关键字查询
string keyword = queryName;
Regex findby = new Regex(@"/" + keyword + "/", RegexOptions.IgnoreCase); QueryDocument query = new QueryDocument
{
{"filename",findby}
}; MongoCursor<MongoGridFSFileInfo> docList = fs.Find(query).SetSortOrder(sort);
MongoGridFSFileInfo doc = fs.FindOne(query);
string FileName = doc.filename.tostring(); MongoGridFSStream stream = fs.OpenRead(FileName);
byte[] bytes = new byte[stream.Length]; stream.Read(bytes, 0, bytes.Length); FileStream fswrite = new FileStream(@"c:\" + "test1.jpg", FileMode.Create, FileAccess.Write);
fswrite.Write(bytes, 0, bytes.Length);
fswrite.Flush();
fswrite.Close(); } /// <summary>
/// 上传文件
/// </summary>
public void Upload()
{
try
{
Init1(); FileInfo file = new FileInfo("c:\\jpf.jpg");
FileStream ImageStream = file.Open(FileMode.Open); int nFileLen = (int)ImageStream.Length; MongoGridFSSettings fsSetting = new MongoGridFSSettings() { Root = fileTable };
MongoGridFS fs = new MongoGridFS(DB, fsSetting); byte[] myData = new Byte[nFileLen];
ImageStream.Read(myData, 0, nFileLen);
//调用Write、WriteByte、WriteLine函数时需要手动设置上传时间
//通过Metadata 添加附加信息
MongoGridFSCreateOptions option = new MongoGridFSCreateOptions();
option.UploadDate = DateTime.Now; BsonDocument doc = new BsonDocument();
doc.Add("UserID", 1L);
option.Metadata = doc; //创建文件,文件并存储数据
using (MongoGridFSStream gfs = fs.Create("c:\\jpf.jpg", option))
{
gfs.Write(myData, 0, nFileLen);
gfs.Close();
} }
catch (Exception e)
{ } } /// <summary>
/// 更新图片,通过文件名称进行查询,获取已存在图片的ID,新上传一张图片后,将原有图片删除;
/// </summary>
public void updateImage()
{
Init1();
string ImageUrl = "c:\\jpf.jpg";
using (FileStream ImageStream = new FileStream(ImageUrl, FileMode.Open))
{
int ImageLen = (int)ImageStream.Length;
MongoGridFSSettings fsSetting = new MongoGridFSSettings() { Root = fileTable };
MongoGridFS gridfs = new MongoGridFS(DB, fsSetting);
byte[] ImageData = new Byte[ImageLen];
ImageStream.Read(ImageData, 0, ImageLen); MongoGridFSFileInfo ExistImage = gridfs.FindOne(Query.EQ("filename", "c:\\jpf.jpg"));
string id = ExistImage.Id.ToString();
MongoGridFSCreateOptions option = new MongoGridFSCreateOptions();
option.UploadDate = DateTime.Now;
BsonDocument doc = new BsonDocument();
doc.Add("company", "sxgis");
option.Metadata = doc;
using (MongoGridFSStream gfs = gridfs.Create("jpf.jpg", option))
{
gfs.Write(ImageData, 0, ImageLen);
gfs.Close();
}
ObjectId oid = new ObjectId(id);
gridfs.DeleteById(oid); ImageStream.Close();
}
}
/// <summary>
/// 上传图片方法二
/// </summary>
public void upload2()
{
var server = MongoServer.Create("mongodb://localhost:27017/?safe=true");
var database = server.GetDatabase("xiandb"); var fileName = "C:\\wb.jpg";
var newFileName = "C:\\wb1.jpg";
using (var fs = new FileStream(fileName, FileMode.Open))
{
var gridFsInfo = database.GridFS.Upload(fs, fileName);
var fileId = gridFsInfo.Id.ToString(); ObjectId oid = new ObjectId(fileId);
var file = database.GridFS.FindOne(Query.EQ("_id", oid)); using (var stream = file.OpenRead())
{
var bytes = new byte[stream.Length];
stream.Read(bytes, 0, (int)stream.Length);
using (var newFs = new FileStream(newFileName, FileMode.Create))
{
newFs.Write(bytes, 0, bytes.Length);
}
}
} } }
}

MongoDB GridFS 对图片进行增删改的更多相关文章

  1. 封装对MongoDB数据库的增删改查访问方法(基于MongoDB官方发布的C&num;驱动)

    本文利用MongoDB官方发布的C#驱动,封装了对MongoDB数据库的增删改查访问方法.先用官方提供的mongo-csharp-driver ,当前版本为1.7.0.4714 编写数据库访问帮助类 ...

  2. 利用koa实现mongodb数据库的增删改查

    概述 使用koa免不了要操纵数据库,现阶段流行的数据库是mongoDB,所以我研究了一下koa里面mongoDB数据库的增删改查,记录下来,供以后开发时参考,相信对其他人也有用. 源代码请看:我的gi ...

  3. MongoDB学习之--增删改查(1)

    本文是对mongodb学习的一点笔记,主要介绍最简单的增删改操作,初学,看着API,有什么错误,希望大家指正:(使用官方驱动) 1.增 增加操作是最简单的,构造bsonDcument插入即可: 方式1 ...

  4. MongoDB --- 02&period; 基本操作&comma;增删改查&comma;数据类型&comma;比较符&comma;高级用法&comma;pymongo

    一.基本操作 . mongod 启动服务端 2. mongo 启动客户端 3. show databses 查看本地磁盘的数据库 4. use 库名 切换到要使用的数据库 5. db 查看当前使用的数 ...

  5. webpack4&plus;express&plus;mongodb&plus;vue 实现增删改查

    在讲解之前,我们先来看看效果如下所示: 1)整个页面的效果如下: 2) 新增数据效果如下: 3) 新增成功如下: 4) 编辑数据效果如下: 5) 编辑成功效果如下: 6) 删除数据效果如下: 7) 删 ...

  6. nodejs对mongodb数据库的增删改查操作(转载)

    首先要确保mongodb的正确安装,安装参照:http://docs.mongodb.org/manual/tutorial/install-mongodb-on-debian-or-ubuntu-l ...

  7. 69&period;nodejs对mongodb数据库的增删改查操作

    转自:https://www.cnblogs.com/sexintercourse/p/6485381.html 首先要确保mongodb的正确安装,安装参照:http://docs.mongodb. ...

  8. python连接集群mongodb,封装增删改查

    1.下载pymongo pip install pymongo 2.直接上代码 [ini配置文件] 封装读ini省略~~ [db.py] class Database(): def __init__( ...

  9. Mongodb基本操作入门&comma;增删改查和索引

    主要进程 mongod.exe为启动数据库实例的进程. mongo是一个与mongod进程进行交互的JavaScript shell进程,它提供了一些交互的接口函数用户对数据库的管理. 基本命令 sh ...

随机推荐

  1. PropertyGrid控件由浅入深&lpar;一&rpar;:文章大纲

    Winform中PropertyGrid控件是一个非常好用的对象属性编辑工具,对于Key-Value形式的数据的处理也是非常的好用. 因为Property控件设计良好,在很小的空间内可以展示很多的内容 ...

  2. 解谜谷歌 DevOps:什么特质可以打造世界级可靠系统?

    [编者按]本文是 Gene Kim 总结自对 Randy Shoup 两个小时的采访,主要关注谷歌 DevOps 的提升之道.本文系 OneAPM联合高效运维编译整理. Randy Shoup 曾协助 ...

  3. WCF扩展系列 - 行为扩展&lpar;Behaviors&rpar;

    原文地址:http://www.cnblogs.com/Creator/archive/2011/05/21/2052687.html 这个系列的第一部分将会重点关注WCF行为(behaviors), ...

  4. Session深入理解

    Session是在什么情况下产生的 客户端访问服务器端,服务器端为每个用户生成一个唯一的sessionId,是这样吗?sessionId的作用是什么? http://www.cnblogs.com/s ...

  5. Java继承--覆盖

    java中支持单继承.不直接支持多继承,但对C++中的多继承机制进行改良. 单继承:一个子类只能有一个直接父类. 多继承:一个子类可以有多个直接父类(java中不允许,进行改良).不直接支持,因为多个 ...

  6. 异常-----freemarker&period;template&period;TemplateException&colon;Error executing macro&colon;mainSelect

    1.错误描述 freemarker.template.TemplateException:Error executing macro:mainSelect require parameter:id i ...

  7. SpringAOP术语

    2019-03-10/21:12:31 参考博客:MiroKlose AOP术语 1.通知: 通知定义了切面要完成的工作内容和何时完成工作,就是什么时候去做辅助功能,功能具体是什么代码 五种类型 Be ...

  8. Linux - 其他命令

    其他命令 目标 查找文件 find 软链接 ln 打包和压缩 tar 软件安装 apt-get 01. 查找文件 find 命令功能非常强大,通常用来在 特定的目录下 搜索 符合条件的文件 序号 命令 ...

  9. 低电平ViL

    低电平 编辑 低电平(Vil)指的是保证逻辑门的输入为低电平时所允许的最大输入低电平,当输入电平低于Vil时,则认为输入电平为低电平.   中文名 低电平 外文名 Vil 主要应用 测量电缆和保护连接 ...

  10. chest

    chest - 必应词典 美[tʃest]英[tʃest] n.胸部:胸膛:有…胸的:胸部…的 网络胸围:箱子:胸腔 变形复数:chests: