使用C#从数据库下载多个文件

时间:2014-10-01 04:32:36

标签: c# asp.net

我在提名门户网站上工作。用户提交他们的提名以及一些附件。每项提名的附件数量可能从3到10不等。因此,对于每个提名,评估者必须一次下载10个文件,这非常繁忙。所以我想提供一个选项,一次下载与提名相关的所有附件作为Zip文件。我能够立刻下载单个文件。请为我提供一次下载多个文件的解决方案以及一些示例代码段。以下是我用于下载单个文件的代码 用于文件下载。我将文件内容存储为数据库中的二进制文件

protected void DownloadFile(object sender, EventArgs e)
{
    int id = int.Parse((sender as LinkButton).CommandArgument);
    byte[] bytes;
    string fileName, contentType;
    string constr = ConfigurationManager.ConnectionStrings["constr"].ConnectionString;
    using (SqlConnection con = new SqlConnection(constr))
    {
        using (SqlCommand cmd = new SqlCommand())
        {
            cmd.CommandText = "select Name, Data, ContentType from tblFiles where Id=@Id";
            cmd.Parameters.AddWithValue("@Id", id);
            cmd.Connection = con;
            con.Open();
            using (SqlDataReader sdr = cmd.ExecuteReader())
            {
                sdr.Read();
                bytes = (byte[])sdr["Data"];
                contentType = sdr["ContentType"].ToString();
                fileName = sdr["Name"].ToString();
            }
            con.Close();
        }
    }
    Response.Clear();
    Response.Buffer = true;
    Response.Charset = "";
    Response.Cache.SetCacheability(HttpCacheability.NoCache);
    Response.ContentType = contentType;
    Response.AppendHeader("Content-Disposition", "attachment; filename=" + fileName);
    Response.BinaryWrite(bytes);
    Response.Flush(); 
    Response.End();
}

1 个答案:

答案 0 :(得分:1)

您没有提到您正在使用的.NET版本。

使用.NET 4.5,您可以使用ZipFile类:ZipFile Class

此处显示了写入zip存档的示例:ZipArchive.CreateEntry

<强>更新

早期版本的.NET的替代方案是:SharpZipLib