Keep Moving......

导航

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编辑  收藏  举报