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#驱动)

    本文利用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. 基本操作,增删改查,数据类型,比较符,高级用法,pymongo

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

  5. webpack4+express+mongodb+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.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基本操作入门,增删改查和索引

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

随机推荐

  1. 深入理解jQuery中的Deferred

    引入 1  在开发的过程中,我们经常遇到某些耗时很长的javascript操作,并且伴随着大量的异步. 2  比如我们有一个ajax的操作,这个ajax从发出请求到接收响应需要5秒,在这5秒内我们可以 ...

  2. Abstract Factory Step by Step --- 抽象工厂

    抽象工厂是创建型模式的代表,其他的还有单件(Singleton).生成器(Builder).工厂方法(Factory Method)以及原型(Prototype),模式本身没有好坏之分,只有适用不适用 ...

  3. 滴滴与Uber的竞争分析

    滴滴与Uber的竞争分析 随着互联网时代的到来,智能手机的普及,互联网不再是一个完全虚拟的东西,它开始慢慢地融入到我们的生活中来.这些年我们可以明显地感受到我们的生活方式在一天天发生着变化,我们也逐渐 ...

  4. Exhange上添加IMAP4

    1.登录到Exchange admim Center,选择servers,双击servers名称,选择IMAP4 2.服务器上查看任务管理器中的服务器,找到exchange imap4两个服务器是否开 ...

  5. Office 365 系列四 ------ 绑定公司域名

    Office 365包含了企业邮箱服务(Exchange Online),我们如果要用微软的企业邮箱,那么我们必须绑定我们公司的自己域名,而不是用微软 提供的二级域名,其实微软的整个Exchange ...

  6. 改变Eclipse 中代码字体大小

    1.改变eclipse 中代码字体大小,就是我打进去的java文件的字体大小 wiondow--preferences--general--appearance--colors and fonts-- ...

  7. LinQ高级查询

    1.模糊查询 con.Users.Where(a =>a.UserName.Contains(name)).ToList(); //包含name con.Users.Where(a =>a ...

  8. html 报表导出excel防止数字变科学计数

    在html 标签加:  <html xmlns:x="urn:schemas-microsoft-com:office:excel">    在要导出的tr加:  &l ...

  9. 64位win7下powerdesigner15连接postgresql9.2问题解决

    win7下已经安装jdk1.6 64bit版 安装powerdesigner 15,下载了postgressql jdbc驱动(下载地址:http://jdbc.postgresql.org/down ...

  10. 让div固定在顶部不随滚动条滚动

    让div固定在顶部不随滚动条滚动 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "h ...