項目的開發中不可避免的會碰到從服務器上面Down文件下來,Down單個文件有不少方法,好比文件流什麼的,可是當須要Down下來的是一個內部包含多個文件的文件夾時,因爲瀏覽器的解析規則,即便咱們不嫌麻煩在項目裏面來個循環下載,在web端要不停的接受文件,如此差的用戶體驗度是咱們實在忍受不了的。web
固然這個時候咱們能夠經過FTP上傳和下載,不過在這裏給你們分享另一個方法,將要下載的文件和文件夾通通打包,而後下載壓縮包 。這個打包的類經過調用壓縮程序接口來實現,至關於你在服務器上面右擊添加到壓縮文件。shell
分享下這個打包類瀏覽器
1 using System; 2 using System.Diagnostics; 3 using System.IO; 4 using Microsoft.Win32; 5 6 namespace GM360_REWARD.Controllers 7 { 8 public class WinRARCSharpss 9 { 10 // WinRAR安裝註冊表key 11 private const string WinRAR_KEY = @"WinRAR.ZIP\shell\open\command"; 12 13 /// <summary> 14 /// 利用 WinRAR 進行壓縮 15 /// </summary> 16 /// <param name="path">將要被壓縮的文件夾(絕對路徑)</param> 17 /// <param name="rarPath">壓縮後的 .rar 的存放目錄(絕對路徑)</param> 18 /// <param name="rarName">壓縮文件的名稱(包括後綴)</param> 19 /// <returns>true 或 false。壓縮成功返回 true,反之,false。</returns> 20 public bool RAR(string path, string rarPath, string rarName) 21 { 22 bool flag = false; 23 string rarexe; //WinRAR.exe 的完整路徑 24 RegistryKey regkey; //註冊表鍵 25 Object regvalue; //鍵值 26 string cmd; //WinRAR 命令參數 27 ProcessStartInfo startinfo; 28 Process process; 29 try 30 { 31 regkey = Registry.ClassesRoot.OpenSubKey(WinRAR_KEY); 32 regvalue = regkey.GetValue(""); // 鍵值爲 "d:\Program Files\WinRAR\WinRAR.exe" "%1" 33 rarexe = regvalue.ToString(); 34 regkey.Close(); 35 rarexe = rarexe.Substring(1, rarexe.Length - 7); // d:\Program Files\WinRAR\WinRAR.exe 36 Directory.CreateDirectory(path); //壓縮命令,至關於在要壓縮的文件夾(path)上點右鍵->WinRAR->添加到壓縮文件->輸入壓縮文件名(rarName) 37 cmd = string.Format("a {0} {1} -r", rarName, path); 38 startinfo = new ProcessStartInfo(); 39 startinfo.FileName = rarexe; 40 startinfo.Arguments = cmd; //設置命令參數 41 startinfo.WindowStyle = ProcessWindowStyle.Hidden; //隱藏 WinRAR 窗口 42 startinfo.WorkingDirectory = rarPath; 43 process = new Process(); 44 process.StartInfo = startinfo; 45 process.Start(); 46 process.WaitForExit(); //無限期等待進程 winrar.exe 退出 47 if (process.HasExited) 48 { 49 flag = true; 50 } 51 process.Close(); 52 } 53 catch (Exception e) 54 { 55 throw e; 56 } 57 return flag; 58 } 59 60 /// <summary> 61 /// 利用 WinRAR 進行解壓縮 62 /// </summary> 63 /// <param name="path">文件解壓路徑(絕對)</param> 64 /// <param name="rarPath">將要解壓縮的 .rar 文件的存放目錄(絕對路徑)</param> 65 /// <param name="rarName">將要解壓縮的 .rar 文件名(包括後綴)</param> 66 /// <returns>true 或 false。解壓縮成功返回 true,反之,false。</returns> 67 public bool UnRAR(string path, string rarPath, string rarName) 68 { 69 bool flag = false; 70 string rarexe; 71 RegistryKey regkey; 72 Object regvalue; 73 string cmd; 74 ProcessStartInfo startinfo; 75 Process process; 76 try 77 { 78 regkey = Registry.ClassesRoot.OpenSubKey(WinRAR_KEY); 79 regvalue = regkey.GetValue(""); 80 rarexe = regvalue.ToString(); 81 regkey.Close(); 82 rarexe = rarexe.Substring(1, rarexe.Length - 7); 83 Directory.CreateDirectory(path); //解壓縮命令,至關於在要壓縮文件(rarName)上點右鍵->WinRAR->解壓到當前文件夾 84 cmd = string.Format("x {0} {1} -y", rarName, path); 85 startinfo = new ProcessStartInfo(); 86 startinfo.FileName = rarexe; 87 startinfo.Arguments = cmd; 88 startinfo.WindowStyle = ProcessWindowStyle.Hidden; 89 startinfo.WorkingDirectory = rarPath; 90 process = new Process(); 91 process.StartInfo = startinfo; 92 process.Start(); 93 process.WaitForExit(); 94 if (process.HasExited) 95 { 96 flag = true; 97 } 98 process.Close(); 99 } 100 catch (Exception e) 101 { 102 throw e; 103 } 104 return flag; 105 } 106 }
這個項目主要用到的是 利用 WinRAR 進行壓縮 的方法服務器
方法調用 spa
WinRARCSharp.RAR(a,b,c)
這樣就OK了 是否是比起原來方便多了code