1 protected void btn_Down(object sender, EventArgs e) 2 { 3 string filePath = Server.MapPath("/TradeLog/" + txtDate.Text.Trim()); 4 if (!downBeforeValidation(filePath)) 5 return; 6 dlZipDir(filePath, txtDate.Text); 7 } 8 9 /// <summary> 10 /// 下载前验证 11 /// </summary> 12 /// <param name="filePath">文件路径</param> 13 /// <returns></returns> 14 private bool downBeforeValidation(string filePath) 15 { 16 //判断密码是否正确 17 string downPassWord = WebConfigurationManager.AppSettings["downPassWord"]; 18 if (string.IsNullOrEmpty(txtPassWord.Text) || txtPassWord.Text.Trim() != downPassWord) 19 { 20 Response.Write("<script>alert('密码错误或为空')</script>"); 21 return false; 22 } 23 //判断文件是否存在 24 25 if (!Directory.Exists(filePath)) 26 { 27 Response.Write("<script>alert('目录不存在')</script>"); 28 return false; 29 } 30 return true; 31 } 32 33 /// <summary> 34 /// 全部变量 35 /// </summary> 36 ZipOutputStream zos = null; 37 String strBaseDir = ""; 38 /// <summary> 39 /// 下载文件 40 /// </summary> 41 /// <param name="strPath">路径</param> 42 /// <param name="strFileName">下载后默认显示文件名称</param> 43 void dlZipDir(string strPath, string strFileName) 44 { 45 MemoryStream ms = null; 46 Response.ContentType = "application/octet-stream"; 47 strFileName = HttpUtility.UrlEncode(strFileName).Replace('+', ' '); 48 Response.AddHeader("Content-Disposition", "attachment; filename=" + strFileName + ".zip"); 49 ms = new MemoryStream(); 50 zos = new ZipOutputStream(ms); 51 strBaseDir = strPath + "\"; 52 addZipEntry(strBaseDir); 53 zos.Finish(); 54 zos.Close(); 55 Response.Clear(); 56 Response.BinaryWrite(ms.ToArray()); 57 Response.End(); 58 } 59 60 /// <summary> 61 /// 生成压缩文件 62 /// </summary> 63 /// <param name="PathStr"></param> 64 void addZipEntry(string PathStr) 65 { 66 DirectoryInfo di = new DirectoryInfo(PathStr); 67 foreach (DirectoryInfo item in di.GetDirectories()) 68 { 69 addZipEntry(item.FullName); 70 } 71 foreach (FileInfo item in di.GetFiles()) 72 { 73 FileStream fs = File.OpenRead(item.FullName); 74 byte[] buffer = new byte[fs.Length]; 75 fs.Read(buffer, 0, buffer.Length); 76 string strEntryName = item.FullName.Replace(strBaseDir, ""); 77 ZipEntry entry = new ZipEntry(strEntryName); 78 zos.PutNextEntry(entry); 79 zos.Write(buffer, 0, buffer.Length); 80 fs.Close(); 81 } 82 }