zoukankan      html  css  js  c++  java
  • ASP.NET批量下载文件的方法

    一、实现步骤

    在用户操作界面,由用户选择需要下载的文件,系统根据所选文件,在服务器上创建用于存储所选文件的临时文件夹,将所选文件拷贝至临时文件夹。然后调用 RAR程序,对临时文件夹进行压缩,然后输出到客户端。最后删除临时文件夹。
     
    二、代码实现
     
    1、ASP.NET批量下载 核心代码

    复制代码代码如下:
    //遍历服务器指定文件夹下的所有文件
    string path = "uploads/Image/";
    string serverPath = Server.MapPath(path);
    //创建临时文件夹
    string tempName = DateTime.Now.ToString("yyyyMMddHHMMss");
    string tempFolder = Path.Combine(serverPath, tempName);
    Directory.CreateDirectory(tempFolder);
    DirectoryInfo folder = new DirectoryInfo(serverPath);
    foreach (FileInfo file in folder.GetFiles())
    {
     string filename = file.Name;
     File.Copy(serverPath + "/" + filename, tempFolder + "/" + filename);
    }
    //ZKHelper.JSHelper.Alert("图片拷贝成功!");
    //产生RAR文件,及文件输出
    RARSave(tempFolder, tempName);
    DownloadRAR(tempFolder + "\\" + tempName + ".rar");

     
    2、RARSave(string tempFolder, string tempName) 方法

    复制代码代码如下:
    /// <summary>
    /// 生成RAR文件
    /// </summary>
    /// <param name="path">存放复制文件的目录</param>
    /// <param name="rarPatch">RAR文件存放目录</param>
    /// <param name="rarName">RAR文件名</param>
    private void RARSave(string rarPatch, string rarName)
    {
        string the_rar;
        RegistryKey the_Reg;
        Object the_Obj;
        string the_Info;
        ProcessStartInfo the_StartInfo;
        Process the_Process;
        try
        {
     the_Reg = Registry.ClassesRoot.OpenSubKey(@"WinRAR");
     the_Obj = the_Reg.GetValue("");
     the_rar = the_Obj.ToString();
     the_Reg.Close();
     the_rar = the_rar.Substring(1, the_rar.Length - 7);
     the_Info = " a " + rarName + " -r";
     the_StartInfo = new ProcessStartInfo();
     the_StartInfo.FileName = "WinRar";//the_rar;
     the_StartInfo.Arguments = the_Info;
     the_StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
     //打包文件存放目录
     the_StartInfo.WorkingDirectory = rarPatch;
     the_Process = new Process();
     the_Process.StartInfo = the_StartInfo;
     the_Process.Start();
     the_Process.WaitForExit();
     the_Process.Close();
        }
        catch (Exception)
        {
     throw;
        }
    }

     
    3、DownloadRAR(string file)方法

    复制代码代码如下:
    /// <summary>
    /// 下载生成的RAR文件
    /// </summary>
    private void DownloadRAR(string file)
    {
        FileInfo fileInfo = new FileInfo(file);
        Response.Clear();
        Response.ClearContent();
        Response.ClearHeaders();
        Response.AddHeader("Content-Disposition", "attachment;filename=" + fileInfo.Name);
        Response.AddHeader("Content-Length", fileInfo.Length.ToString());
        Response.AddHeader("Content-Transfer-Encoding", "binary");
        Response.ContentType = "application/octet-stream";
        Response.ContentEncoding = System.Text.Encoding.GetEncoding("gb2312");
        Response.WriteFile(fileInfo.FullName);
        Response.Flush();
        string tempPath = file.Substring(0, file.LastIndexOf("\\"));
        //删除临时目录下的所有文件
        DeleteFiles(tempPath);
        //删除空目录
        Directory.Delete(tempPath);
        Response.End();
    }

    4、DeleteFiles(string tempPath) 方法

    复制代码代码如下:
    /// <summary>
    /// 删除临时目录下的所有文件
    /// </summary>
    /// <param name="tempPath">临时目录路径</param>
    private void DeleteFiles(string tempPath)
    {
        DirectoryInfo directory = new DirectoryInfo(tempPath);
        try
        {
     foreach (FileInfo file in directory.GetFiles())
     {
         if (file.Attributes.ToString().IndexOf("ReadOnly") != -1)
         {
      file.Attributes = FileAttributes.Normal;
         }
         File.Delete(file.FullName);
     }
        }
        catch (Exception)
        {
     throw;
        }
    }

     DEMO下载地址:https://dwz.cn/Jw3z6fVq 

  • 相关阅读:
    朴素贝叶斯小结
    Logistic回归小结
    线性回归小结
    Zabbix使用采坑记录
    cookie与session测试关注点
    JMeter笔记十二:逻辑控制器之事务控制器、模块控制器和吞吐量控制器
    JMeter笔记十一:逻辑控制器之随机控制器、随机顺序控制器和交替控制器
    JMeter笔记十:逻辑控制器之ForEach控制器
    JMeter笔记九:逻辑控制器之循环控制器、While控制器
    JMeter笔记八:逻辑控制器之如果(If)控制器、仅一次控制器、Switch控制器
  • 原文地址:https://www.cnblogs.com/xproer/p/10741726.html
Copyright © 2011-2022 走看看