Asp.Net 批量打包文档并导出压缩包

前言

  在最近的项目中遇到一个导出压缩包的功能需求。正好是将之前导出的文档进行打包的批处理。下面开始我们的续集讲解。首先我们需要引入插件:ICSharpCode.SharpZipLib.Zip
Using ICSharpCode.SharpZipLib.Zip; //这个插件将帮助我们实现最主要的压缩处理。

内容

  下面我们通过代码和每个步骤的注释来说明一下实现的过程:
  

#region [-批量导出简历压缩包 -]   
                string[] User = objects.Split(',');
                List<string> listFJ = new List<string>();//保存附件路径
                List<string> listFJName = new List<string>();//保存附件名字
                //将需要压缩的文件路径及名称分别存入到ListFj、ListFjName中              
                for (int i = 0; i < User.Length; i++)
                {
                    GetURL(User[i], out name);
                    var StrURL = serverPath + "Word/" + name;
                    if (name != "")
                    {
                        listFJ.Add(StrURL);
                        listFJName.Add(name);
                    }
                }
                //将listFJ:路径,listFJName:文件名,serverPath:导出的路径,time:导出的文件名,9:压缩级别。传入方法中。
                string time = DateTime.Now.Ticks.ToString();
                ZipFileMain(listFJ.ToArray(), listFJName.ToArray(), serverPath + "Download/" + time + ".zip", 9);
                //以流的方式读取并导出压缩包文件
                string sFileName = serverPath + "Download/" + time + ".zip";
                FileStream fileStream = new FileStream(sFileName, FileMode.Open);
                long fileSize = fileStream.Length;
                byte[] fileBuffer = new byte[fileSize];
                fileStream.Read(fileBuffer, 0, (int)fileSize);
                fileStream.Close();

                context.Response.ContentType = "application/zip";
                context.Response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(time + ".Zip", Encoding.UTF8));
                context.Response.AddHeader("Content-Length", fileSize.ToString());

                context.Response.BinaryWrite(fileBuffer);

                //删除服务端的压缩文件
                string root = serverPath + "Download/";
                DirectoryInfo di = new DirectoryInfo(root);
                var files = di.GetFiles();
                foreach (var f in files)
                {
                    if (f.Extension.ToUpper() == ".ZIP")
                    {
                        File.Delete(f.FullName);
                    }

                }
                //删除服务端的DOC文件
                root = serverPath + "Word/";
                di = new DirectoryInfo(root);
                files = di.GetFiles();
                foreach (var f in files)
                {
                    if (f.Extension.ToUpper() == ".DOCX")
                    {
                        File.Delete(f.FullName);
                    }

                }
                //关闭整个方法
                context.Response.End();
                context.Response.Close();
#endregion

小结

  每个需求的实现都可以在之前的技术上延伸丰富出更多的内容。很喜欢在这些新功能的实现中一点点发掘设计自己的方案,体会最终的乐趣。荣幸与您分享!

AspxZip 2.0 特点: 1.能够在支持 ASP.NET 的 Web 服务器上通过友好的 Web 界面方便地 压缩/解压存放在服务器上的文档。 2.通用性极强,只要服务器支持 ASP.NET,就可以正常运行。 3.目前对 ZIP 格式档案文件提供完整支持,不久的将来,还将可以解压 RAR、ARJ等压缩格式。 4.支持如设置口令,设置压缩比例等功能。 5.没有任何限制,更新到最新版本,支持有密码文件解压。 如果你曾做过Web管理员的话,你会知道,通过 FTP 来备份/还原服务器上的大量零散文档(如10,000个HTML文档)是一件多么痛苦的事情!所以,现在有许多的管理员都想找一个能 在线打包压缩/解压的Web程序一边方便管理。这就是我写这个 AspxZip 在线打包压缩/解压缩程序的原始动机。 AspxZip 的设计目的是想通过友好的Web界面方便的对存放在远程Web服务器上的文档进行压缩打包和解压缩操作,从而方便备份/还原Web服务器上的各种数据。目前, 网上确实有了一些号称支持在线压缩/解压的 Web 程序,其中有用 ASP 编的,也有用 PHP 编的。但由于他们的工作原理都是通过调用 RAR.exe 或 7Zip.exe 第三方压缩/解压程序进行 压缩/解压操作的,只要服务器的安全设置设得比较好,Web程序就无法调用 RAR.exe 等程序而不能使用,所以通用性不强,大部分的虚拟主机都不能正常使用,更不用说要求很严的免费空间了。 所以,要想让它在任何服务器上都能正常使用,唯一的办法是:把压缩/解压算法核心写到程序里面去!这就是 AspxZip 和其他在线压缩/解压的Web程序的不同之处。其优 点是运行效率高,通用性极强,只要服务器支持 ASP.NET,就可以正常运行。 AspxZip 特点: 效率高,运行速度快。经测试,在我的个人网站(服务器并不怎么好)上运行时压缩速度平均为 10 MB/s,最高速度可达 25 MB/s。 能够在支持 ASP.NET 的 Web 服务器上通过友好的 Web 界面方便地 压缩/解压存放在服务器上的文档。 通用性极强,只要服务器支持 ASP.NET,就可以正常运行。 目前对 ZIP 格式档案文件提供完整支持,不久的将来,还将可以解压 RAR、ARJ等压缩格式。 支持如设置口令,设置压缩比例等功能。 注:本程序使用了 ICSharpCode.NET 提供的 SharpZipLib 压缩组件,在此对 ICSharpCode.NET 表示感谢。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

格林希尔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值