文件 在线压缩 技术
客户有时会有这样的需求:把服务器上的某个文件和文件夹下载到本地,我们的解决方法是使用在线压缩技术。就是把文件先在服务器上压缩,创建一个.ZIP,然后下载到本地。
网上提供了原代码,但是有些不足之处。第一:中文文件名的文件压缩之后,压缩包里的中文文件名都是乱码。不过我已经改了源文件,并且编译了一个新的dll,大家直接引用这个dll就可以了。有需要的给我要,我的邮件ligc@langchao.com.第二:只能往压缩包里方一个文件,而我写了一个可以放文件夹的函数AddFolder,给大家带来了极大的方便。
如有不足之处,请大家多多指出。
2 //File Reference
3 using System.IO;
4 //Zip Component Reference
5 using ICSharpCode.SharpZipLib.Checksums;
6 using ICSharpCode.SharpZipLib.Zip;
7 using ICSharpCode.SharpZipLib.Zip.Compression;
8 using ICSharpCode.SharpZipLib.Zip.Compression.Streams;
9
10 //test
11 using System.Web;
12
13 namespace ZipUnzip
14 {
15 /// <summary>
16 /// ZipUnzip 主要用于在线压缩和解压缩文件
17 /// </summary>
18 public class ZipUnzip
19 {
20 #region 定义私有变量
21 private Crc32 crc;
22 private ZipOutputStream s;
23 private string errorString;
24 #endregion
25
26 public ZipUnzip()
27 {
28 }
29
30 /// <summary>
31 /// 开始压缩并设置压缩文件(.zip)路径
32 /// </summary>
33 /// <param name="fileName">fileName</param>
34 public void BeginZip( string fileName )
35 {
36 crc = new Crc32();
37 s = new ZipOutputStream( File.Create( fileName ) );
38 }
39
40 /// <summary>
41 /// 结束压缩
42 /// </summary>
43 public void FinishZip()
44 {
45 s.Finish();
46 s.Close();
47 }
48
49 /// <summary>
50 /// 添加文件到压缩文件
51 /// </summary>
52 /// <param name="fileName"></param>
53 /// <param name="zipName"></param>
54 /// <returns>错误原因</returns>
55 public string AddZip( string fileName, string zipName )
56 {
57 try
58 {
59 FileStream fs = File.OpenRead( fileName );
60 byte[] buffer = new byte[fs.Length];
61 fs.Read( buffer, 0, buffer.Length );
62 fileName = Path.GetFileName( fileName );
63 long fileLength = fs.Length;
64 fs.Close();
65
66 ZipEntry entry = new ZipEntry( zipName );
67 entry.DateTime = DateTime.Now;
68 entry.Size = fileLength;
69
70 crc.Reset();
71 crc.Update( buffer );
72 entry.Crc = crc.Value;
73 s.PutNextEntry( entry );
74 s.Write( buffer, 0, buffer.Length );
75
76 return string.Empty;
77 }
78 catch( Exception addEx )
79 {
80 errorString = addEx.Message;
81 this.FinishZip();
82 return addEx.Message;
83 }
84 }
85
86 public void AddFolder( string folderName, string zipName )
87 {
88 if( Directory.Exists( folderName ) )
89 {
90 foreach( string str in Directory.GetFileSystemEntries( folderName ) )
91 {
92 if( File.Exists( str ) )
93 AddZip( str, zipName + "\\" + str.Substring( str.LastIndexOf( "\\" ) + 1 ) );
94 else
95 AddFolder( str, zipName + "\\" + str.Substring( str.LastIndexOf( "\\" ) + 1 ) );
96 }
97 }
98 }
99
100 /// <summary>
101 /// 获得错误原因
102 /// </summary>
103 /// <returns></returns>
104 public string GetErrorString()
105 {
106 return errorString;
107 }
108 }
109 }
110
111 Class Finish
112
113 以下为调用方法
114 using System;
115 using System.Collections;
116 using System.ComponentModel;
117 using System.Data;
118 using System.Drawing;
119 using System.Web;
120 using System.Web.SessionState;
121 using System.Web.UI;
122 using System.Web.UI.WebControls;
123 using System.Web.UI.HtmlControls;
124
125 using System.IO;
126
127 using ICSharpCode.SharpZipLib.Checksums;
128 using ICSharpCode.SharpZipLib.Zip;
129 using ICSharpCode.SharpZipLib.Zip.Compression;
130 using ICSharpCode.SharpZipLib.Zip.Compression.Streams;
131
132 namespace ZipUnzip
133 {
134 /// <summary>
135 /// WebForm1 的摘要说明。
136 /// </summary>
137 public class WebForm1 : System.Web.UI.Page
138 {
139 protected System.Web.UI.WebControls.TextBox TextBox1;
140 protected System.Web.UI.WebControls.TextBox TextBox2;
141 protected System.Web.UI.WebControls.Button Button2;
142
143 private void Page_Load(object sender, System.EventArgs e)
144 {
145 // 在此处放置用户代码以初始化页面
146 }
147
148 #region Web 窗体设计器生成的代码
149 override protected void OnInit(EventArgs e)
150 {
151 //
152 // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
153 //
154 InitializeComponent();
155 base.OnInit(e);
156 }
157
158 /// <summary>
159 /// 设计器支持所需的方法 - 不要使用代码编辑器修改
160 /// 此方法的内容。
161 /// </summary>
162 private void InitializeComponent()
163 {
164 this.Button2.Click += new System.EventHandler(this.Button2_Click);
165 this.Load += new System.EventHandler(this.Page_Load);
166
167 }
168 #endregion
169
170 private void Button1_Click(object sender, System.EventArgs e)
171 {
172
173 }
174
175 private void Button2_Click(object sender, System.EventArgs e)
176 {
177 ZipUnzip zuz = new ZipUnzip();
178 zuz.BeginZip( Server.MapPath( "." ) + "\\" + "Temp.zip" );
179 zuz.AddFolder( Server.MapPath( "." ) + "\\" + "C301-K", "C301-M" );
180 zuz.FinishZip();
181 }
182
183
184 }
185 }
186
187
由于时间仓促,所以没有时间整理,日后一定理顺程序。
转载于:https://www.cnblogs.com/liguancong/archive/2005/10/29/264344.html
文件 在线压缩 技术相关推荐
- PDF文件在线压缩方法
当我们的PDF文件过大时,我们需要将PDF文件进行在线压缩,那么我们进行在线压缩的方法有哪些?下面就让小编给大家简单介绍一下. 步骤一:需要将PDF文件进行在线压缩的方法是进入到迅捷在线压缩,在线PD ...
- 如何将视频文件在线压缩,压缩的方法
视频我们都知道吧,用各种播放器播放的电视剧叫视频,手机拍摄的短片也叫视频,可是我们每天都要浏览很多的视频,也会有很多的视频保存在我们的电脑和手机之中,而这些视频我也不想删除,毕竟有的很正能量,有的很珍 ...
- PDF文件在线压缩的方法
PDF文件在线压缩的方法有?我们可以一些比较大的PDF文件进行在线压缩,那么我们是怎么在线将PDF压缩的呢?下面小编就简单给大家介绍一下. 辅助工具:迅捷在线压缩 步骤一:找到一台有网的电脑,在电脑的 ...
- pdf压缩的网站?pdf文件在线压缩?在线压缩pdf文件大小?pdf文档压缩,在线压缩pdf文件大小,压缩pdf大小的方法?
pdf在线压缩大小?在工作中需要处理大量PDF文件,我们通常要对PDF文件进行压缩处理.那么问题来了,PDF文件该怎么压缩呢?可能很多人都不知道具体的操作方法,今天要分享给大家的正是PDF压缩的方法, ...
- 文件在线压缩与解压|基于Springboot实现文件在线压缩与解压
收藏点赞不迷路 关注作者有好处 文末获取源码 项目编号:BS-XX-178 一,项目简介 主要使用 gzip协议对上传到服务器的文件进行在线压缩和解压操作. 二,环境介绍 语言环境:Java: j ...
- 如何把视频文件在线压缩变小?
现在人们没事的时候就喜欢各种的追剧,看电视.看电影离开家就不能在线观看,需要把下载到手机上或者是iPad上.有的比较经典可能没有资源的可能就看不到,所以下载了就不想删除,想给储存起来留作纪念,但是下载 ...
- 多文件在线压缩并下载
开发背景:某医院的简历系统,由求职者在前台填写在线简历,并且上传简历文件(一般为Word.PDF文件.开放性上传,名称也无法统一). 现客户要求在后台批量下载简历,并且要求以"意向岗位+姓名 ...
- PDF文件怎么在线压缩?教你在线压缩的方法
PDF文件怎么在线压缩大小呢?PDF文件是大家在日常办公或者学习中经常使用到的,我们日常中发送传输文件都会使用它,当大家遇到那种内存特别大的PDF文件时,发送起来会非常缓慢,这就导致我们的办公效率大大 ...
- Asp.net在线压缩和解压缩简单实现(附项目源码)
首先服务器上要确保安装rar软件,且对相应目录有可写权限,该代码利用递归显示文件目录,实现文件在线压缩和解压并测试成功. 这里参照了一些网络文档(清清月儿),代码有详细注释,便于大家学习和参考.rar ...
最新文章
- WinAPI: CreateDirectoryEx - 根据模版建立文件夹
- GitLab远程仓库迁移
- 使用Windows8开发Metro风格应用四
- [html] 如何给table中的某一列设置固定宽度
- tensorrt轻松部署高性能dnn推理_NVIDIA TensorRT高性能深度学习推理
- 使用haystack实现django全文检索搜索引擎功能
- 远程无法连接数据库的问题
- JQueryEasyUI学习笔记(一)
- 通过反编译深入理解Java String及intern
- kuangbin新模板错误
- 如何更改电脑IP地址 哪个IP转换器比较好用
- 回溯法求解TSP问题(旅行商问题)
- python获取扫描枪数据线_【转】C#中判断扫描枪输入与键盘输入
- 学习记录:自平衡莱洛三角形v1(原理,代码)学习记录(一)
- Error:Initialization error (angular 2 language service). Cannot read property 'CommandTypes' of unde
- 企业——nginx的图片压缩、https模块、重写规则、盗链
- 【SQLServer】用SQL语句更改数据库名,表名,列名
- 干5年外包,突然失业了。。。
- 打造流畅九宫格抽奖活动
- 华为服务器pe安装系统教程视频教程,华为电脑重装windows7系统的方法
热门文章
- 北京卫生中级英语计算机考试成绩查询,2019年北京卫生专业技术资格成绩查询时间及入口...
- 性能测试(05)-表达式和业务关联-json关联
- centos7每天定时删除备份mysql文件
- Qt之Q_GLOBAL_STATIC创建全局静态对象
- 汇编程序.c到a.out的生命历程
- 内存首地址为1000h_C++虚继承,菱形继承,内存分布
- redhat linux ls ls,Linux(3)RedHat7 基本命令二-ls命令詳解
- 计算机丢失wininet,win7系统启动程序提示因为计算机中丢失wininet.dll的解决方法...
- 数据结构与算法 / LRU 缓存淘汰算法
- mysql的二级分区_分布式数据库一级分区和二级分区