把Mxd文件压缩上传测试代码!

View Code

  1 using System;
  2 using System.Collections.Generic;
  3 using System.Linq;
  4 using System.Text;
  5 using System.IO.Compression;
  6 using System.IO;
  7 using ESRI.ArcGIS.DataSourcesGDB;
  8 using ESRI.ArcGIS.esriSystem;
  9 using ESRI.ArcGIS.Geodatabase;
 10 using ESRI.ArcGIS.Geometry;
 11 namespace CompressMxd
 12 {
 13     class CompressMxdFile
 14     {
 15         public static IWorkspace OpenWorkspace(string mdbPath)
 16         {
 17             IWorkspaceFactory pwspfact=new AccessWorkspaceFactoryClass();
 18             IWorkspace pwsp = pwspfact.OpenFromFile(mdbPath, 0);
 19             return pwsp;
 20         }
 21         public static bool ReadAndCompressMxdFile(string fileName, IWorkspace pwsp)
 22         {
 23             byte[] buffer = null;
 24             try
 25             {
 26                 using (System.IO.FileStream sourceStream = new System.IO.FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.Read))
 27                 {
 28                     buffer = new byte[sourceStream.Length];
 29                     int checkCounter = sourceStream.Read(buffer, 0, buffer.Length);
 30                     byte[] compressBytes = Compress(buffer);
 31
 32                     MemoryBlobStream blob = new MemoryBlobStream();
 33                     ((IMemoryBlobStreamVariant)blob).ImportFromVariant(compressBytes as object);//将一个Byte[]对象作为参数传入
 34
 35                     IFeatureWorkspace pFwsp = pwsp as IFeatureWorkspace;
 36                     ITable ptable = pFwsp.OpenTable("MxdCollection");
 37                     IRow row = ptable.CreateRow();
 38                     var idx = row.Fields.FindField("MxdFile");
 39                       IField field = ptable.Fields.get_Field(idx);
 40                       if (field.CheckValue(blob))
 41                       {
 42                           row.set_Value(idx, blob as object);
 43                       }
 44                       row.Store();
 45                 }
 46             }
 47             catch (System.Exception ex)
 48             {
 49                 return false;
 50             }
 51
 52             return true;
 53         }
 54         public static bool DeCompressMxdFile(string fileName,IWorkspace pwsp)
 55         {
 56
 57             IFeatureWorkspace pFwsp = pwsp as IFeatureWorkspace;
 58             ITable ptable = pFwsp.OpenTable("MxdCollection");
 59             IRow row = ptable.GetRow(4);
 60             var idx = row.Fields.FindField("MxdFile");
 61             object objtest =  row.get_Value(idx);
 62
 63             IMemoryBlobStreamVariant pVar = objtest as IMemoryBlobStreamVariant;
 64             object pobj = new object();
 65             pVar.ExportToVariant(out pobj); //转入Object对象
 66             byte[] desbytes = Decompress((byte[])pobj);
 67             using (System.IO.FileStream destinationStream = new System.IO.FileStream(fileName, FileMode.Create))
 68             {
 69                 destinationStream.Write(desbytes,0,desbytes.Length);
 70             }
 71             return true;
 72         }
 73         private static byte[] Compress(byte[] bytes)
 74         {
 75             using (MemoryStream ms = new MemoryStream())
 76             {
 77                 GZipStream Compress = new GZipStream(ms, CompressionMode.Compress);
 78
 79                 Compress.Write(bytes, 0, bytes.Length);
 80
 81                 Compress.Close();
 82
 83                 return ms.ToArray();
 84
 85             }
 86         }
 87
 88         private static byte[] Decompress(Byte[] bytes)
 89         {
 90             using (MemoryStream tempMs = new MemoryStream())
 91             {
 92                 using (MemoryStream ms = new MemoryStream(bytes))
 93                 {
 94                     GZipStream Decompress = new GZipStream(ms, CompressionMode.Decompress);
 95
 96                     Decompress.CopyTo(tempMs);
 97
 98                     Decompress.Close();
 99
100                     return tempMs.ToArray();
101                 }
102             }
103         }
104     }
105 }

  这里的这个思路和代码完全可以将任何文件上传到Geodatabase中!当然文件大小是受限制的。这和Access有关和机器的位数有关,在Oracle中是否可以放开一些文件大小方面的限制?

  对文件进行管理,通过Hash算法进行文件的版本控制!这个想法确实不错,不过具体要做成什么样子呢,我也不知道!

  微软提供了Compress(Gzipstream类)和Security命名空间分别实现了LZ77和哈弗曼编码结合的压缩算法,实现了加密的算法,可以直接调用。

  说实话不太喜欢拿来主义,用是很方便,但是真的不是自己做出来的,感觉理解方面还是有很多困难。不知道其内部机制到底是怎样的!!!

  不知道如果Mxd文档调用的要素类是服务器中的,我的Mxd文档下载到任意客户端是否都能够显示图形要素!

将Mxd文件压缩并上传到Geodatabase!相关推荐

  1. 图片文件压缩并上传至阿里云OSS

    图片处理 Thumbnails 在进行Java开发时可以使用Thumbnails工具类对图片进行处理,旋转.裁剪.格式转换.加水印等. 使用步骤 导包 <dependency><gr ...

  2. 文件压缩及上传FTP服务器简单应用(实践篇)

    前言 时隔这么久我又回来了,最近忙里偷闲写了一个FTP上传文件的demo,用于上传公司发布的USDK服务的log文件,之前发布的USDK在客户那儿出现了不少bug,而解决这些bug需要我们的辛勤测试人 ...

  3. 巧用shell+rsync服务实现日志自动过滤处理压缩并上传日志服务器,自动分类

    分享一个自己很早以前先写的日志存储方案,简单实用,业务端上传完日志后自己清除已经上传过的日志,连清空间的工作都省了.(未完) 找出所有部署目录下的日志文件夹,压缩指定文件与文件夹,不改变日志压缩路径( ...

  4. SpringBoot+El-upload实现上传文件到通用上传接口并返回文件全路径(若依前后端分离版源码分析)

    场景 SpringBoot+ElementUI实现通用文件下载请求(全流程图文详细教程): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/deta ...

  5. android 快速实现图片压缩与上传

    由于最近项目更新功能比较的忙,也没时间去整理自己的知识点和管理自己的博客.在android对手机相册中的图片的压缩和上传到服务器上,这样的功能在每个app开发中都会有这样的需求.所以今天就对andro ...

  6. Vue 图片压缩并上传至服务器

    本文主要讲解基于 Vue + Vant ,实现移动端图片选择,并用 Canvas 压缩图片,最后上传至服务器.还会封装一个工具类,方便直接调用. 一.工具类封装 废话不多说先上代码,封装一个 Comp ...

  7. Bmob+Luban(鲁班)压缩图片实现相册选择图片压缩后上传到Bmob后台Glide加载图片显示到本地

    源代码已上传CSDN:https://download.csdn.net/download/qq_16519957/11068345 因为本章需要跟前面的知识结合起来看所以就做了一个前面链接方便大家查 ...

  8. 记录一次 用服务器下载文件,并上传到百度网盘的实践

    最近学会使用DepotDownloader下载旧版游戏,担心有一天steam不给下载了,所以就想他们都下载下来,然后保存到网盘上,然后分享出来. 我所下载的游戏叫<泰拉瑞亚>最新版有1.3 ...

  9. java压缩包加密上传,解密下载

    java压缩包加密上传,解密下载 业务场景 供应商上传投标文件需要进行加密处理,通过链接下载时下载的时加密的文件,而通过系统内访问接口下载时,下载的是解密好的文件. 问题解决思路 1. 首先配置三个保 ...

最新文章

  1. 【MATLAB】符号数学计算(二):符号运算中的运算符和函数
  2. JVM---垃圾收集器(万字详解)
  3. MPB:南土所褚海燕组-​非靶标代谢组测定土壤可提取有机碳组分
  4. linux chown命令 改变文件拥有者
  5. libevent 源码阅读 Ubuntu下muduo库的安装与使用
  6. 源码与tarball套件管理程序笔记摘录
  7. jquery 样式获取设置值_jQuery获取样式中的背景颜色属性值/颜色值
  8. python3导入_Python3导入相对还是绝对的正确方法?
  9. 微服务容错时,这些技术你要立刻想到
  10. photoshop cs6(mac版)安装教程
  11. 签名验证反爬,反反爬第二篇博客,Python爬虫120例
  12. Python爬取必应搜索首页图片
  13. 京东全球购与花王达成区块链溯源合作
  14. Vue电影网站构建实战教程
  15. 在Python中使用Pandas.DataFrame对Excel操作笔记一 - 从Excel里面获取说需要的信息
  16. k8s.gcr.io的镜像无法下载的问题
  17. grad-cam原理
  18. stm32+esp8266 GET请求心知天气的简单方法
  19. 老毛桃安装U盘 格式化 不可删除的部分
  20. 腾讯开源推理框架TNN Android编译不通过

热门文章

  1. linux命令tail-f,Linux中的tail命令的详细解释
  2. Could not find the Qt platform plugin windows错误解决方法
  3. 计算机组装的品牌价格,图文详解2019组装电脑配置清单及价格推荐
  4. H3C基本实验:PPP、FR配置实验
  5. FitNesse工具
  6. C#--Gauss消元之完全主元法
  7. autoware的icp_maching解读
  8. 佳能Canon imagePRESS C7010VP 打印机驱动
  9. http请求之GET、POST对比分析
  10. jupyter notebook调试流程