将Mxd文件压缩并上传到Geodatabase!
把Mxd文件压缩上传测试代码!
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!相关推荐
- 图片文件压缩并上传至阿里云OSS
图片处理 Thumbnails 在进行Java开发时可以使用Thumbnails工具类对图片进行处理,旋转.裁剪.格式转换.加水印等. 使用步骤 导包 <dependency><gr ...
- 文件压缩及上传FTP服务器简单应用(实践篇)
前言 时隔这么久我又回来了,最近忙里偷闲写了一个FTP上传文件的demo,用于上传公司发布的USDK服务的log文件,之前发布的USDK在客户那儿出现了不少bug,而解决这些bug需要我们的辛勤测试人 ...
- 巧用shell+rsync服务实现日志自动过滤处理压缩并上传日志服务器,自动分类
分享一个自己很早以前先写的日志存储方案,简单实用,业务端上传完日志后自己清除已经上传过的日志,连清空间的工作都省了.(未完) 找出所有部署目录下的日志文件夹,压缩指定文件与文件夹,不改变日志压缩路径( ...
- SpringBoot+El-upload实现上传文件到通用上传接口并返回文件全路径(若依前后端分离版源码分析)
场景 SpringBoot+ElementUI实现通用文件下载请求(全流程图文详细教程): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/deta ...
- android 快速实现图片压缩与上传
由于最近项目更新功能比较的忙,也没时间去整理自己的知识点和管理自己的博客.在android对手机相册中的图片的压缩和上传到服务器上,这样的功能在每个app开发中都会有这样的需求.所以今天就对andro ...
- Vue 图片压缩并上传至服务器
本文主要讲解基于 Vue + Vant ,实现移动端图片选择,并用 Canvas 压缩图片,最后上传至服务器.还会封装一个工具类,方便直接调用. 一.工具类封装 废话不多说先上代码,封装一个 Comp ...
- Bmob+Luban(鲁班)压缩图片实现相册选择图片压缩后上传到Bmob后台Glide加载图片显示到本地
源代码已上传CSDN:https://download.csdn.net/download/qq_16519957/11068345 因为本章需要跟前面的知识结合起来看所以就做了一个前面链接方便大家查 ...
- 记录一次 用服务器下载文件,并上传到百度网盘的实践
最近学会使用DepotDownloader下载旧版游戏,担心有一天steam不给下载了,所以就想他们都下载下来,然后保存到网盘上,然后分享出来. 我所下载的游戏叫<泰拉瑞亚>最新版有1.3 ...
- java压缩包加密上传,解密下载
java压缩包加密上传,解密下载 业务场景 供应商上传投标文件需要进行加密处理,通过链接下载时下载的时加密的文件,而通过系统内访问接口下载时,下载的是解密好的文件. 问题解决思路 1. 首先配置三个保 ...
最新文章
- 【MATLAB】符号数学计算(二):符号运算中的运算符和函数
- JVM---垃圾收集器(万字详解)
- MPB:南土所褚海燕组-​非靶标代谢组测定土壤可提取有机碳组分
- linux chown命令 改变文件拥有者
- libevent 源码阅读 Ubuntu下muduo库的安装与使用
- 源码与tarball套件管理程序笔记摘录
- jquery 样式获取设置值_jQuery获取样式中的背景颜色属性值/颜色值
- python3导入_Python3导入相对还是绝对的正确方法?
- 微服务容错时,这些技术你要立刻想到
- photoshop cs6(mac版)安装教程
- 签名验证反爬,反反爬第二篇博客,Python爬虫120例
- Python爬取必应搜索首页图片
- 京东全球购与花王达成区块链溯源合作
- Vue电影网站构建实战教程
- 在Python中使用Pandas.DataFrame对Excel操作笔记一 - 从Excel里面获取说需要的信息
- k8s.gcr.io的镜像无法下载的问题
- grad-cam原理
- stm32+esp8266 GET请求心知天气的简单方法
- 老毛桃安装U盘 格式化 不可删除的部分
- 腾讯开源推理框架TNN Android编译不通过