项目的开发中不可避免的会碰到从服务器上面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了 是不是比起原来方便多了