天天看点

服务器上文件打包下载

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