原因:
最近做一个公司项目,点击导出想把各自报告书及请求箱单导出存为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目录也压缩进去
使用说明:
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");
下载后进行解压效果:
其他参考地址:
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