MongoDB GridFS 对图片进行增删改
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); } } } } } }
posted on 2013-11-19 17:11 snowfield 阅读(1007) 评论(0) 编辑 收藏 举报