首页 > 学院 > 开发设计 > 正文

ASP.NET打包下载文件

2019-11-14 15:46:48
字体:
来源:转载
供稿:网友

使用的类库为: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         catch104         {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         try141         {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 }

 点击下载源码


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表