• ASP.NET下文件批量下载应用


    1.场景描述

    在B/S环境下,客户提出批量导出员工照片功能。具体为:选中一个部门或者单位,系统能够批量下载所选单元的照片到客户端。

    2.解决思路

    由于系统中员工的照片存储在服务器硬盘上,因此,应该有两种方式供用户选择:其一,写一个C/S客户端,利用客户端功能,实现客户端批量下载操作。其二,在现有ASP.NET环境下,将所需照片文件合并成一个文件下载到用户客户端。比较而言,两种思路的难度都不大,但是考虑到系统的统一性,最终决定采用方案二,将文件打包后下载。

    3.实现步骤

    在用户操作界面,由用户选择员工,系统根据所选人员,在服务器上创建用于存储所选文件的临时文件夹,将所选文件拷贝至临时文件夹。然后调用RAR程序,对临时文件夹进行压缩,然后输出到客户端。最后删除临时文件夹。

    4.部分关键代码

    创建临时文件夹

    string Folder = DateTime.Now.ToString("HHMMss");

    string tempFolder = Path.Combine(ImagesPath, Folder);

    Directory.CreateDirectory(tempFolder);

    var empList 
    = rs.ToList();

    拷贝照片文件

    foreach (var x in empList)
                {
                    File.Copy(ImagesPath 
    + @"\" + x.ID + ".jpg", tempFolder + @"\" + x.DeptName + "-" + x.Name + "-" + x.ID + ".jpg");
                }

    产生RAR文件,及文件输出

    RARsave(tempFolder, tempFolder, Folder);
    ResponseFile(tempFolder 
    + @"\" + Folder + ".rar");
     public void RARsave(string patch, 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);
                Directory.CreateDirectory(patch);
                
    //命令参数
                
    //the_Info = " a    " + rarName + "  " + @"C:Test?70821.txt"; //文件压缩
                the_Info = " a " + rarName + "  " + patch + "  -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 ex)
            {
                
    throw ex;
            }
        }

        
    protected void ResponseFile(string fileName)
        {

            FileInfo fileInfo 
    = new FileInfo(fileName);
            Response.Clear();
            Response.ClearContent();
            Response.ClearHeaders();
            Response.AddHeader(
    "Content-Disposition""attachment;filename=" + fileName);
            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 = fileName.Substring(0, fileName.LastIndexOf("\\"));
            DelDir(tempPath);
            Directory.Delete(tempPath);
            Response.End();

        }
  • 相关阅读:
    SQLServer性能杀手
    SqlServer内存瓶颈分析SQLServer:Buffer Manager
    HTML5变化 (一)
    对于using嵌套的改进
    String.IsNullOrEmpty()和String.IsNullOrWhiteSpace()
    querySelector & querySelectorAll
    Action<T> 委托
    Func<T, TResult>
    SL4.背景图片拖动
    JavaScript日志
  • 原文地址:https://www.cnblogs.com/skyshenwei/p/1677121.html
Copyright © 2020-2023  润新知