ASP.NET批量下载文件的方法

本文实例讲述了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;

    }

}

希望本文所述对大家的asp.net#程序设计有所帮助。