zoukankan      html  css  js  c++  java
  • 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 }

     点击下载源码

  • 相关阅读:
    Linux 下的类似Windows下Everything的搜索工具
    windows和linux环境下制作U盘启动盘
    程序调试手段之gdb, vxworks shell
    LeetCode 1021. Remove Outermost Parentheses (删除最外层的括号)
    LeetCode 1047. Remove All Adjacent Duplicates In String (删除字符串中的所有相邻重复项)
    LeetCode 844. Backspace String Compare (比较含退格的字符串)
    LeetCode 860. Lemonade Change (柠檬水找零)
    LeetCode 1221. Split a String in Balanced Strings (分割平衡字符串)
    LeetCode 1046. Last Stone Weight (最后一块石头的重量 )
    LeetCode 746. Min Cost Climbing Stairs (使用最小花费爬楼梯)
  • 原文地址:https://www.cnblogs.com/imluzhi/p/4871810.html
Copyright © 2011-2022 走看看