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. SpringMVC学习笔记(二)

    一.HandleMapping和HandlerAdapter的讲解 HandleMapping:处理映射器,可以理解为为请求的url查找对应的Controller类. HandlerAdapter:可 ...

  2. Windows下用Python 3.4+自带的venv模块创建虚拟环境

    Python 3.4+自带了venv模块,用于创建虚拟环境,每个虚拟环境都可以安装一套独立的第三方模块. 本文在Windows 10上操作. 1.创建一个虚拟环境: D:\>mkdir test ...

  3. CentOS6.5上源码安装MongoDB3.2.1

    1.环境准备: mkdir /home/mongodb #创建MongoDB程序存放目录 mkdir /data/mongodata -p #创建数据存放目录 mkdir /data/log/mong ...

  4. 第一个PHP程序-HelloWorld

    <?php //echo输出字符串 echo "Hello php!你好 php" ; 以上程序输出结果为:Hello php!你好 php

  5. LoadRunner ---协议分析

    在做性能测试的时候,协议分析是困扰初学者的难题,选择错误的协议会导致Virtual User Generator 录制不到脚本:或录制的脚本不完整,有些应用可能需要选择多个协议才能完整的记录 客户端与 ...

  6. mysql高性能索引策略

    转载说明:http://www.nyankosama.com/2014/12/19/high-performance-index/ 1. 引言 随着互联网时代地到来,各种各样的基于互联网的应用和服务进 ...

  7. add number

    // io.cpp #include <iostream> int readNumber() { std::cout << "Enter a number: &quo ...

  8. react js 之生命周期

    react redux 结合是目前比较流行的前端开发框架,主要基于react 中的state 树为数据模型,借助redux 来控制 state 数据:下面直接从代码层面解析该框架中一个react 组件 ...

  9. Python Microsoft Visual C++ Compiler Package for Python 2.7

    错误描述: 在从源代码安装Python模块时遇到此错误.可是我明明从官网下载并安装了Microsoft Visual C++ Compiler Package for Python 2.7,且配置了环 ...

  10. start

    ------siwuxie095 start 启动另一个窗口运行指定的程序或命令 语法: START ["title"] [/D path] [/I] [/MIN] [/MAX] ...