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

1.场景描述

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

2.解决思路

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

3.实现步骤

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

4.部分关键代码

创建临时文件夹

Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->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();

    }



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值