ASP.NET : 如何将服务端的多个文件打包下载

正在开发的系统中包含了这部分功能。下面将有关重点的代码粘贴出来,给大家参考

我用到了ICSharpCode.SharpZipLib这个dll. 据我所知,凡是现在做压缩和解压缩之类的程序,很少有人会不用这个组件的。赞一个先

1. 核心代码

 

  1. MemoryStream ms = new MemoryStream();

  2. byte[] buffer = null;

  3.  
  4. using (ZipFile file = ZipFile.Create(ms))

  5. {

  6. file.BeginUpdate();

  7. file.NameTransform = new MyNameTransfom();//通过这个名称格式化器,可以将里面的文件名进行一些处理。默认情况下,会自动根据文件的路径在zip中创建有关的文件夹。

  8.  
  9.  
  10. file.Add(Server.MapPath("~/images/1.jpg"));

  11. file.Add(Server.MapPath("~/images/2.jpg"));

  12. file.Add(Server.MapPath("~/images/3.jpg"));

  13.  
  14. file.CommitUpdate();

  15.  
  16. buffer = new byte[ms.Length];

  17. ms.Position = 0;

  18. ms.Read(buffer, 0, buffer.Length);

  19. }

  20.  
  21.  
  22. Response.AddHeader("content-disposition", "attachment;filename=Test.zip");

  23. Response.BinaryWrite(buffer);

  24. Response.Flush();

  25. Response.End();


另外,我专门写了一个NameTransfom

 

  1. using System.IO;

  2.  
  3. public class MyNameTransfom : ICSharpCode.SharpZipLib.Core.INameTransform {

  4.  
  5. #region INameTransform 成员

  6.  
  7. public string TransformDirectory(string name)

  8. {

  9. return null;

  10. }

  11.  
  12. public string TransformFile(string name)

  13. {

  14. return Path.GetFileName(name);

  15. }

  16.  
  17. #endregion

  18. }

 

2. 测试效果

 

ASP.NET : 如何将服务端的多个文件打包下载

ASP.NET : 如何将服务端的多个文件打包下载

DEMO下载地址:https://dwz.cn/Jw3z6fVq