• 服务器上文件打包下载


       项目的开发中不可避免的会碰到从服务器上面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.ZIPshellopencommand";
     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 FilesWinRARWinRAR.exe" "%1"
     33                 rarexe = regvalue.ToString();
     34                 regkey.Close();
     35                 rarexe = rarexe.Substring(1, rarexe.Length - 7); // d:Program FilesWinRARWinRAR.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了 是不是比起原来方便多了

  • 相关阅读:
    算法系列(三)
    .net页面生命周期
    初级程序员的学习方法见解
    .net面向对象学习笔记(二)
    算法系列(二)
    “automation服务器不能创建对象”的问题的解决方案大全
    UNKNOWN.RPT 无法将请求提交后台处理
    水晶报表ActiveX控件打印
    .net中调用js乱码解决办法
    GridView自动序号
  • 原文地址:https://www.cnblogs.com/a164266729/p/3666782.html
Copyright © 2020-2023  润新知