客户有时会有这样的需求:把服务器上的某个文件和文件夹下载到本地,我们的解决方法是使用在线压缩技术。就是把文件先在服务器上压缩,创建一个.ZIP,然后下载到本地。
网上提供了原代码,但是有些不足之处。第一:中文文件名的文件压缩之后,压缩包里的中文文件名都是乱码。不过我已经改了源文件,并且编译了一个新的dll,大家直接引用这个dll就可以了。有需要的给我要,我的邮件ligc@langchao.com.第二:只能往压缩包里方一个文件,而我写了一个可以放文件夹的函数AddFolder,给大家带来了极大的方便。
如有不足之处,请大家多多指出。

  1 using System;
  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

文件 在线压缩 技术相关推荐

  1. PDF文件在线压缩方法

    当我们的PDF文件过大时,我们需要将PDF文件进行在线压缩,那么我们进行在线压缩的方法有哪些?下面就让小编给大家简单介绍一下. 步骤一:需要将PDF文件进行在线压缩的方法是进入到迅捷在线压缩,在线PD ...

  2. 如何将视频文件在线压缩,压缩的方法

    视频我们都知道吧,用各种播放器播放的电视剧叫视频,手机拍摄的短片也叫视频,可是我们每天都要浏览很多的视频,也会有很多的视频保存在我们的电脑和手机之中,而这些视频我也不想删除,毕竟有的很正能量,有的很珍 ...

  3. PDF文件在线压缩的方法

    PDF文件在线压缩的方法有?我们可以一些比较大的PDF文件进行在线压缩,那么我们是怎么在线将PDF压缩的呢?下面小编就简单给大家介绍一下. 辅助工具:迅捷在线压缩 步骤一:找到一台有网的电脑,在电脑的 ...

  4. pdf压缩的网站?pdf文件在线压缩?在线压缩pdf文件大小?pdf文档压缩,在线压缩pdf文件大小,压缩pdf大小的方法?

    pdf在线压缩大小?在工作中需要处理大量PDF文件,我们通常要对PDF文件进行压缩处理.那么问题来了,PDF文件该怎么压缩呢?可能很多人都不知道具体的操作方法,今天要分享给大家的正是PDF压缩的方法, ...

  5. 文件在线压缩与解压|基于Springboot实现文件在线压缩与解压

    收藏点赞不迷路  关注作者有好处 文末获取源码 项目编号:BS-XX-178 一,项目简介 主要使用 gzip协议对上传到服务器的文件进行在线压缩和解压操作. 二,环境介绍 语言环境:Java:  j ...

  6. 如何把视频文件在线压缩变小?

    现在人们没事的时候就喜欢各种的追剧,看电视.看电影离开家就不能在线观看,需要把下载到手机上或者是iPad上.有的比较经典可能没有资源的可能就看不到,所以下载了就不想删除,想给储存起来留作纪念,但是下载 ...

  7. 多文件在线压缩并下载

    开发背景:某医院的简历系统,由求职者在前台填写在线简历,并且上传简历文件(一般为Word.PDF文件.开放性上传,名称也无法统一). 现客户要求在后台批量下载简历,并且要求以"意向岗位+姓名 ...

  8. PDF文件怎么在线压缩?教你在线压缩的方法

    PDF文件怎么在线压缩大小呢?PDF文件是大家在日常办公或者学习中经常使用到的,我们日常中发送传输文件都会使用它,当大家遇到那种内存特别大的PDF文件时,发送起来会非常缓慢,这就导致我们的办公效率大大 ...

  9. Asp.net在线压缩和解压缩简单实现(附项目源码)

    首先服务器上要确保安装rar软件,且对相应目录有可写权限,该代码利用递归显示文件目录,实现文件在线压缩和解压并测试成功. 这里参照了一些网络文档(清清月儿),代码有详细注释,便于大家学习和参考.rar ...

最新文章

  1. WinAPI: CreateDirectoryEx - 根据模版建立文件夹
  2. GitLab远程仓库迁移
  3. 使用Windows8开发Metro风格应用四
  4. [html] 如何给table中的某一列设置固定宽度
  5. tensorrt轻松部署高性能dnn推理_NVIDIA TensorRT高性能深度学习推理
  6. 使用haystack实现django全文检索搜索引擎功能
  7. 远程无法连接数据库的问题
  8. JQueryEasyUI学习笔记(一)
  9. 通过反编译深入理解Java String及intern
  10. kuangbin新模板错误
  11. 如何更改电脑IP地址 哪个IP转换器比较好用
  12. 回溯法求解TSP问题(旅行商问题)
  13. python获取扫描枪数据线_【转】C#中判断扫描枪输入与键盘输入
  14. 学习记录:自平衡莱洛三角形v1(原理,代码)学习记录(一)
  15. Error:Initialization error (angular 2 language service). Cannot read property 'CommandTypes' of unde
  16. 企业——nginx的图片压缩、https模块、重写规则、盗链
  17. 【SQLServer】用SQL语句更改数据库名,表名,列名
  18. 干5年外包,突然失业了。。。
  19. 打造流畅九宫格抽奖活动
  20. 华为服务器pe安装系统教程视频教程,华为电脑重装windows7系统的方法

热门文章

  1. 北京卫生中级英语计算机考试成绩查询,2019年北京卫生专业技术资格成绩查询时间及入口...
  2. 性能测试(05)-表达式和业务关联-json关联
  3. centos7每天定时删除备份mysql文件
  4. Qt之Q_GLOBAL_STATIC创建全局静态对象
  5. 汇编程序.c到a.out的生命历程
  6. 内存首地址为1000h_C++虚继承,菱形继承,内存分布
  7. redhat linux ls ls,Linux(3)RedHat7 基本命令二-ls命令詳解
  8. 计算机丢失wininet,win7系统启动程序提示因为计算机中丢失wininet.dll的解决方法...
  9. 数据结构与算法 / LRU 缓存淘汰算法
  10. mysql的二级分区_分布式数据库一级分区和二级分区