天天看點

伺服器上檔案打包下載下傳

項目的開發中不可避免的會碰到從伺服器上面Down檔案下來,Down單個檔案有很多方法,比如檔案流什麼的,但是當需要Down下來的是一個内部包含多個檔案的檔案夾時,由于浏覽器的解析規則,即使我們不嫌麻煩在項目裡面來個循環下載下傳,在web端要不停的接受檔案,如此差的使用者體驗度是我們實在忍受不了的。

   項目的開發中不可避免的會碰到從伺服器上面Down檔案下來,Down單個檔案有很多方法,比如檔案流什麼的,但是當需要Down下來的是一個内部包含多個檔案的檔案夾時,由于浏覽器的解析規則,即使我們不嫌麻煩在項目裡面來個循環下載下傳,在web端要不停的接受檔案,如此差的使用者體驗度是我們實在忍受不了的。

  當然這個時候我們可以通過FTP上傳和下載下傳,不過在這裡給大家分享另外一個方法,将要下載下傳的檔案和檔案夾統統打包,然後下載下傳壓縮包 。這個打包的類通過調用壓縮程式接口來實作,相當于你在伺服器上面右擊添加到壓縮檔案。

  分享下這個打包類

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 進行壓縮 的方法

  方法調用 

WinRARCSharp.RAR(a,b,c)      

這樣就OK了 是不是比起原來友善多了