设为首页 收藏本站
查看: 908|回复: 0

[经验分享] MongoDB GridFS 对图片进行增删改

[复制链接]
YunVN网友  发表于 2015-7-9 08:39:14 |阅读模式
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 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();
}

///
/// 上传文件
///
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)
{
}
}
///
/// 更新图片,通过文件名称进行查询,获取已存在图片的ID,新上传一张图片后,将原有图片删除;
///
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();
}
}
///
/// 上传图片方法二
///
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);
}
}
}

}

}
}

  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-84561-1-1.html 上篇帖子: 【转】PHP操作MongoDB【NoSQL】 下篇帖子: MongoDB 小试牛刀
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表