• ASP.NET 打包下载文件


    使用的类库为:ICSharpCode.SharpZipLib.dll

    一种是打包整个文件夹,另一种是打包指定的多个文件,大同小异:

      1 using ICSharpCode.SharpZipLib.Zip;
      2 
      3 public partial class _Default : System.Web.UI.Page
      4 {
      5     protected void Page_Load(object sender, EventArgs e)
      6     {
      7         // 打包下载某文件夹里的所有文件
      8 
      9         //需要打包的文件夹
     10         string path = "UploadImage/Images/";
     11         string serverPath = Server.MapPath(path);
     12 
     13         //创建临时文件夹
     14         string tempName = DateTime.Now.ToString("yyyyMMddHHMMss");
     15         string tempFolder = Path.Combine(serverPath, tempName);
     16         Directory.CreateDirectory(tempFolder);
     17 
     18         //遍历文件夹中所有的文件到临时文件夹中
     19         DirectoryInfo folder = new DirectoryInfo(serverPath);
     20         foreach (FileInfo file in folder.GetFiles())
     21         {
     22             string filename = file.Name;
     23             File.Copy(serverPath + "/" + filename, tempFolder + "/" + filename);
     24         }
     25 
     26         //压缩文件
     27         compressFiles(tempFolder, tempFolder + "\\" + tempName + ".rar");
     28         //下载文件
     29         // DownloadRAR(tempFolder + "\\" + tempName + ".rar", "这里下载文件重命名后的名称");
     30 
     31 
     32         //某些文件打包下载
     33         DownLodeSum();
     34 
     35     }
     36 
     37     /// <summary>
     38     /// 某些文件打包下载
     39     /// </summary>
     40     public void DownLodeSum()
     41     {
     42         //临时文件夹所在目录
     43         string path = "UploadImage/";
     44         string serverPath = Server.MapPath(path);
     45 
     46         //创建临时文件夹
     47         string tempName = DateTime.Now.ToString("yyyyMMddHHMMss");
     48         string tempFolder = Path.Combine(serverPath, tempName);
     49         Directory.CreateDirectory(tempFolder);
     50 
     51         //复制需要压缩的文件到临时文件夹中
     52         File.Copy(Server.MapPath("UploadImage/Images/bg-b.png"), Server.MapPath(path + tempName + "/bg-b.png"));
     53         File.Copy(Server.MapPath("UploadImage/Images/bg-j.png"), Server.MapPath(path + tempName + "/bg-j.png"));
     54         File.Copy(Server.MapPath("UploadImage/Images/icon-cart.png"), Server.MapPath(path + tempName + "/icon-cart.png"));
     55 
     56         //压缩文件
     57         compressFiles(tempFolder, tempFolder + "\\" + tempName + ".rar");
     58         //下载文件
     59         DownloadRAR(tempFolder + "\\" + tempName + ".rar", "这里下载文件重命名后的名称");
     60 
     61     }
     62 
     63     /// <summary>
     64     /// 压缩文件
     65     /// </summary>
     66     /// <param name="dir">文件目录</param>
     67     /// <param name="zipfilename">zip文件名</param>
     68     public static void compressFiles(string dir, string zipfilename)
     69     {
     70         if (!Directory.Exists(dir))
     71         {
     72             return;
     73         }
     74         try
     75         {
     76             string[] filenames = Directory.GetFiles(dir);
     77             using (ZipOutputStream s = new ZipOutputStream(File.Create(zipfilename)))
     78             {
     79 
     80                 s.SetLevel(9); // 0 - store only to 9 - means best compression
     81 
     82                 byte[] buffer = new byte[4096];
     83 
     84                 foreach (string file in filenames)
     85                 {
     86                     ZipEntry entry = new ZipEntry(Path.GetFileName(file));
     87                     entry.DateTime = DateTime.Now;
     88                     s.PutNextEntry(entry);
     89                     using (FileStream fs = File.OpenRead(file))
     90                     {
     91                         int sourceBytes;
     92                         do
     93                         {
     94                             sourceBytes = fs.Read(buffer, 0, buffer.Length);
     95                             s.Write(buffer, 0, sourceBytes);
     96                         } while (sourceBytes > 0);
     97                     }
     98                 }
     99                 s.Finish();
    100                 s.Close();
    101             }
    102         }
    103         catch
    104         {
    105 
    106         }
    107     }
    108 
    109     /// <summary>
    110     /// 下载生成的RAR文件
    111     /// </summary>
    112     private void DownloadRAR(string file, string name)
    113     {
    114         FileInfo fileInfo = new FileInfo(file);
    115         Response.Clear();
    116         Response.ClearContent();
    117         Response.ClearHeaders();
    118         Response.AddHeader("Content-Disposition", "attachment;filename=" + name + ".rar");
    119         Response.AddHeader("Content-Length", fileInfo.Length.ToString());
    120         Response.AddHeader("Content-Transfer-Encoding", "binary");
    121         Response.ContentType = "application/octet-stream";
    122         Response.ContentEncoding = System.Text.Encoding.GetEncoding("gb2312");
    123         Response.WriteFile(fileInfo.FullName);
    124         Response.Flush();
    125         string tempPath = file.Substring(0, file.LastIndexOf("\\"));
    126         //删除临时目录下的所有文件
    127         DeleteFiles(tempPath);
    128         //删除空目录
    129         Directory.Delete(tempPath);
    130         Response.End();
    131     }
    132 
    133     /// <summary>
    134     /// 删除临时目录下的所有文件
    135     /// </summary>
    136     /// <param name="tempPath">临时目录路径</param>
    137     private void DeleteFiles(string tempPath)
    138     {
    139         DirectoryInfo directory = new DirectoryInfo(tempPath);
    140         try
    141         {
    142             foreach (FileInfo file in directory.GetFiles())
    143             {
    144                 if (file.Attributes.ToString().IndexOf("ReadOnly") != -1)
    145                 {
    146                     file.Attributes = FileAttributes.Normal;
    147                 }
    148                 File.Delete(file.FullName);
    149             }
    150         }
    151         catch (Exception)
    152         {
    153             throw;
    154         }
    155     }
    156 }

     点击下载源码

  • 相关阅读:
    如何配置MySQL
    软件工程第三次作业
    软件工程第二次作业
    软件工程第一次作业
    Python 【面试总结】
    Vue【你知道吗?】
    Python 【面试强化宝典】
    Python 【基础面试题】
    Vue 【前端面试题】
    Redis 【常识与进阶】
  • 原文地址:https://www.cnblogs.com/imluzhi/p/4871810.html
Copyright © 2020-2023  润新知