Mongodb存储读取Word文档

在为人事系统做操作日志功能时,为了保证已经打印的信函可以还原,需要在每次打印信函时记录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中查看存储的二进制数据,如下图所示:

到此大功告成,弱弱的奉上源码下载地址:http://pan.baidu.com/s/1pJ5DTer

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

时间: 2024-10-09 19:43:58

Mongodb存储读取Word文档的相关文章

使用poi读取word文档

看了很多资料,就一点一点总结吧. word2003和word2007以及以上的后缀名都不一样,一个是doc一个是docx,所以在解析的时候也不一样,而这边主要是使用poi.但是看了很多资料都没有找到所谓的3.8的版本,在官网上只能找到3.11版本(或是是个人的英语水平不行吧) 这个小dome主要就是一个简单的读取word文档,复杂的继续研究: public class ReadWord {    public static void main(String[] args) {        tr

asp.net页面读取word文档内容显示

用asp.net实现对指定word文档内容的读取显示该如何实现?比如左边读取指定文件夹中所有的word文档,以文档的标题作为链接,点击文档标题则在右边某位置显示出该word文档中的内容(包括字体样式,图片显示等). 可以这样实现: 操作WORD配置说明 引入:Word的对象库文件“MSWORD.OLB”(word 2000为MSWORD9.OLB) 1.运行Dcomcnfg.exe 2.组件服务――计算机――我的电脑――DCOM配置――找到microsoft word 文档 3.点击属性 4.选

Java读取word文档解决方案

java读取word文档时,虽然网上介绍了很多插件poi.java2Word.jacob.itext等等,poi无法读取格式(新的API估计行好像还在处于研发阶段,不太稳定,做项目不太敢用):java2Word.jacob容易报错找不到注册,比较诡异,我曾经在不同的机器上试过,操作方法完全一致,有的机器不报错,有的报错,去他们论坛找高人解决也说不出原因,项目部署用它有点玄:itxt好像写很方便但是我查了好久资料没有见到过关于读的好办法.经过一番选择还是折中点采用rtf最好,毕竟rtf是开源格式,

[转载]linux上用PHP读取WORD文档

在linux上用PHP读取WORD文档,其实是使用了 antiword程序把word文档转化为txt文档. 再使用php执行系统命令调用而已. 具体操作如下: 1.安装antiword 官方站:http://www.winfield.demon.nl/ 下载地:http://www.winfield.demon.nl/linux/antiword-0.37.tar.gz 下载完,解压,进入目录 使用命令 make && make install 即可完成安装. 安装时,自动安装到了/roo

C# 设置、删除、读取Word文档背景——基于Spire.Cloud.Word

Spire.Cloud.Word.Sdk提供了接口SetBackgroudColor().SetBackgroudImage().DeleteBackground().GetBackgroudColor()用于设置.删除及读取Word文档背景.本文将以C#程序为例演示如何来调用API接口实现以上内容操作. 必要步骤: 步骤一:dll文件获取及导入.通过官网下载SDK文件包. 下载后,解压文件,将Spire.Cloud.Word.Sdk.dll文件及其他三个dll添加引用至VS程序(如下图):或者

PHP在linux读取word文档

2014-08-28 13:34 2950人阅读 评论(0) 收藏 举报 版权声明:本文为博主原创文章,未经博主允许不得转载. 这几天帮朋友解决一个技术问题,在Linux下,将word文档中的内容读取,然后使用正则匹配,拼成sql入库 查阅了外文资料和google之后,步骤如下: #wget http://www.winfield.demon.nl/linux/antiword-0.37.tar.gz#tar zxvf antiword-0.37.tar.gz#cd antiword-0.37#

读取Word文档的标题

一:描述,将读取的文档标题添加到下拉框中 二:代码 #region 方法:得到Word文档标题的内容 public static List<string> GetTitles(int j,int m)//标题深度,标题字符个数选取标准 { List<string> title = new List<string>(); for (int i = 0; i <= j; i++)//标题深度 { Microsoft.Office.Interop.Word.Applic

poi 读取word文档

1.导入jar包 官网下载地址: https://www.apache.org/dyn/closer.lua/poi/release/bin/poi-bin-3.17-20170915.zip 最开始的时候没有导入xmlbeans包,运行的时候报了个异常,然后学乖了 2.对象的说明 2.1关于word有两个对象;XWPFDocument和HWPFDocument分别对应word2007以上和word2003具体的说明见下面这段话: 来自某位大牛的博客,链接找不到了 2.2 3.读取 3.1 XW

python读取word文档,插入mysql数据库实例

表格内容如下: 1.实现批量导入word文档,取文档标题中的数字作为编号 2.除取上面打钩的内容需要匹配出来入库入库,其他内容全部直接入库mysql # wuyanfeng# -*- coding:utf-8 -*-# 读取docx中的文本代码示例import docximport pymysqlimport reimport os # 创建数据库链接conn = pymysql.connect( host='rm-bp1vu5d84dg12c6d59o.mysql.rds.aliyuncs.c