C#使用ICSharpCode.SharpZipLib压缩后进行web批量下载文件

原因:

最近做一个公司项目,点击导出想把各自报告书及请求箱单导出存为Excel,由于是客户端操作试了各种方法都不适合,并且由于文件较多,导出时需要每个文件单独另存成,这样导致请求后台数据流量较大,而且用户操作起来麻烦。


想达到的效果:

当用户点击一次操作时后台程序把所有生成的Excel文件进行压缩成一个单独文件来下载,这样简化用户操作难度 增强用户体验,在获得下载载文件时同样把这个文件进行解压本地即可.查阅。

使用ICSharpCode.SharpZipLib 方法:


首先下载ICSharpCode.SharpZipLib.DLL组件,然后在项目中引用该组件DLL

下载地址:http://icsharpcode.github.io/SharpZipLib/

http://iweb.dl.sourceforge.net/project/sharpdevelop/SharpZipLib/0.86/SharpZipLib_0860_Bin.zip

https://sourceforge.net/projects/sharpdevelop/?source=typ_redirect


/// <summary>
		///  批量进行多个文件压缩到一个文件
		/// </summary>
		/// <param name="files">文件列表(绝对路径)</param> 这里用的数组,你可以用list 等或者
		/// <param name="zipFileName">生成的zip文件名称</param>
		private void ZipFileDownload(string[] files, string zipFileName)
		{
			MemoryStream ms = new MemoryStream();
			byte[] buffer = null;

			using (ZipFile file = ZipFile.Create(ms))
			{
				file.BeginUpdate();
				
				file.NameTransform = new MyNameTransfom();
				foreach (var item in files)
				{
					if (File.Exists(Server.MapPath(item)))
						file.Add(Server.MapPath(item));
					 
				}
				file.CommitUpdate();
				buffer = new byte[ms.Length];
				ms.Position = 0;
				ms.Read(buffer, 0, buffer.Length);   //读取文件内容(1次读ms.Length/1024M)
				ms.Flush();
				ms.Close();
			}
			Response.Clear();
			Response.Buffer = true;
			Response.ContentType = "application/x-zip-compressed";
			Response.AddHeader("content-disposition", "attachment;filename=" + HttpUtility.UrlEncode(zipFileName));
			Response.BinaryWrite(buffer);
			Response.Flush();
			Response.End();
		}
<pre name="code" class="csharp">//通过这个名称格式化器,可以将里面的文件名进行一些处理。默认情况下,会自动根据文件的路径在zip中创建有关的文件夹。
//处理生成的文件夹内容,否则会把生成的excel目录也压缩进去
    public class MyNameTransfom : ICSharpCode.SharpZipLib.Core.INameTransform
    {

        #region INameTransform 成员

        public string TransformDirectory(string name)
        {
            return null;
        }

        public string TransformFile(string name)
        {
            return Path.GetFileName(name);
        }

        #endregion
    }

 
 

使用说明:

var ss = "ReportExportExcel//jianpin2-20160415-acccgggiii.xls|ReportExportExcel//jianpin20160415-accceeeggg.xls";
ss += "|ReportExportExcel//jianpin2-20160415-MOOOQQQSSS.xls|ReportExportExcel//jianpin2-20160415-wyyy222223.xls";
ZipFileDownload(ss.Split('|'),DateTime.Now.ToString("yyyyMMddhhMmss")+"_检品报告书.zip");

效果如下:

C#使用ICSharpCode.SharpZipLib压缩后进行web批量下载文件_第1张图片

下载后进行解压效果:

C#使用ICSharpCode.SharpZipLib压缩后进行web批量下载文件_第2张图片


其他参考地址:

http://blog.csdn.net/paolei/article/details/5405423

http://www.cnblogs.com/chenkai/archive/2009/07/20/1526970.html

http://blog.csdn.net/kingmax54212008/article/details/38358487

http://www.open-open.com/lib/view/open1389773571492.html

http://www.xuebuyuan.com/1496377.html

http://www.cnblogs.com/kissdodog/p/3525295.html


可使用Ionic.Zip 进行压缩

http://blog.csdn.net/xxj_jing/article/details/50206679

你可能感兴趣的:(web批量下载)