原因:
最近做一个公司项目,点击导出想把各自报告书及请求箱单导出存为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
///
/// 批量进行多个文件压缩到一个文件
///
/// 文件列表(绝对路径) 这里用的数组,你可以用list 等或者
/// 生成的zip文件名称
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();
}
//通过这个名称格式化器,可以将里面的文件名进行一些处理。默认情况下,会自动根据文件的路径在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