ホームページ  >  記事  >  データベース  >  Mongodb存储读取Word文档

Mongodb存储读取Word文档

WBOY
WBOYオリジナル
2016-06-07 16:02:331844ブラウズ

在为人事系统做操作日志功能时,为了保证已经打印的信函可以还原,需要在每次打印信函时记录Word信函的内容。 SQL Server只能记录信函的文字内容,那信函的页面布局、字体式等其他内容如何存储呢?此时Mongodb闪亮登场,由于MongoDB的文档结构为BJSON式(BJS

在为人事系统做操作日志功能时,为了保证已经打印的信函可以还原,需要在每次打印信函时记录Word信函的内容。

SQL Server只能记录信函的文字内容,那信函的页面布局、字体格式等其他内容如何存储呢?此时Mongodb闪亮登场,由于MongoDB的文档结构为BJSON格式(BJSON全称:Binary JSON),而BJSON格式本身就支持保存二进制格式的数据,因此可以把文件的二进制格式的数据直接保存到MongoDB的文档结构中。取的时候再以二进制格式取,这样文档就能实现无损保存。

下面是我已经验证成功,存储Word到Mongo,然后从Mongo读取Word的代码,在此和大家分享分享。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using MongoDB.Bson;
using MongoDB.Driver;

namespace Mongodb
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            Init();
        }
        //数据库连接字符串
        const string strconn = "mongodb://127.0.0.1:27017";
        //数据库名称
        const string dbName = "test";
        MongoServer server;
        MongoDatabase db;
        void Init()
        {
            //创建数据库链接
            server = MongoDB.Driver.MongoServer.Create(strconn);
            //获得数据库
            db = server.GetDatabase(dbName);
        }

        private void btnSave_Click(object sender, EventArgs e)
        {
            SaveDocToMongo(@"d:\quwenzhe.docx");
        }

        private void btnShow_Click(object sender, EventArgs e)
        {
            GetDocFromMongo(@"E:\newquwenzhe.doc");
        }

        /// <summary>
        /// 保存Word到Mongo
        /// </summary>
        /// <param name="filename">需要保存的文件名</param>
        private void SaveDocToMongo(string filename)
        {
            byte[] byteDoc = File.ReadAllBytes(filename);
            BsonDocument doc = new BsonDocument();
            doc["id"] = "1";
            doc["content"] = byteDoc;
            MongoCollection col = db.GetCollection("doc");
            col.Save(doc);
        }

        /// <summary>
        /// 将Mongo中的Word保存到本地
        /// </summary>
        /// <param name="filename">保存到本地的文件名</param>
        private void GetDocFromMongo(string filename)
        {
            MongoCollection col = db.GetCollection("doc");
            var query = new QueryDocument { { "id", "1" } };
            var result = col.FindAs<BsonDocument>(query);
            byte[] buff = (byte[])((BsonDocument)result.ToList()[0]).GetValue("content");
            FileStream fs;
            FileInfo fi = new FileInfo(filename);
            fs = fi.OpenWrite();
            fs.Write(buff, 0, buff.Length);
            fs.Close();
        }
    }
}
执行完存储操作后,大家可以在MongoVUE中查看存储的二进制数据,如下图所示:
n?…?http://www.2cto.com/soft下载地址:http://pan.baidu.com/s/1pJ5DTer。

好了,时间不早了,我得小憩一下,准备下午的软考,谢谢大家观看。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。