項目的開發中不可避免的會碰到從伺服器上面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了 是不是比起原來友善多了