چگونه به صورت پویا فایل های زیپ را در زمان اجرا با استفاده از کتابخانه دات نت ایجاد یا خلق کنیم

در این مقاله یاد خواهیم گرفت چگونه به صورت پویا فایل های زیپ را در زمان اجرا در ASP.NET توسط کتابخانه DotNetZip ایجاد کنیم.

چگونه به صورت پویا فایل های زیپ را در زمان اجرا با استفاده از کتابخانه دات نت ایجاد یا خلق  کنیم

در ابتدا باید DLL کتابخانه  DotNetZip را با استفاده از لینک زیر دانلود کنید.

http://dotnetzip.codeplex.com/releases/view/68268

حالا با داشتن DLL باید Ionic.Zip.Reduced.dll  را در فولدر bin   قرار دهید.

فضاهای نام:

شما باید فضاهای نام زیر را وارد کنید:

using System.IO;
using Ionic.Zip;
using System.Collections.Generic;

ذخیره سازی فایل ها در پوشه سرور:

همان طور که در تصویر می بینید من در وب سایتم فولدری به نام Files که شامل فایل های زیر است را ایجاد کرده ام

نمایش فایل هایی ذخیره شده در فولدر در GridView بر روی سرور:

من یک کنترل GridView به همراه یک دکمه برای دانلود فایل ها قرار داده ام.

همچنین از یک کنترل CheckBox در GridView استفاده کرده ام ،این کنترل به کاربران  اجازه می دهد تا فایل هایی که تمایل به دانلود دارند را دانلود کنند.

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false" EmptyDataText="No files available">
    <Columns>
        <asp:TemplateField>
            <ItemTemplate>
                <asp:CheckBox ID="chkSelect" runat="server" />
                <asp:Label ID="lblFilePath" runat="server" Text='<%# Eval("Value") %>' Visible="false"></asp:Label>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:BoundField DataField="Text" HeaderText="File Name" />
    </Columns>
</asp:GridView>
<br />
<asp:Button ID="btnDownload" runat="server" Text="Download" OnClick="DownloadFiles" />
 

قطعه کد زیر برای بایند کردن لیست فایل ها از فولدر یا دایرکتوری سرور به کنترل GridView در ASP.NET است:

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        string[] filePaths = Directory.GetFiles(Server.MapPath("~/Files/"));
        List<ListItem> files = new List<ListItem>();
        foreach (string filePath in filePaths)
        {
            files.Add(new ListItem(Path.GetFileName(filePath), filePath));
        }
        GridView1.DataSource = files;
        GridView1.DataBind();
    }
}

دانلود چندین فایل انتخاب شده در گرید ویو به عنوان فایل زیپ با استفاده از DotNetZip:


protected void DownloadFiles(object sender, EventArgs e)
{
    using (ZipFile zip = new ZipFile())
    {
        zip.AlternateEncodingUsage = ZipOption.AsNecessary;
        zip.AddDirectoryByName("Files");
        foreach (GridViewRow row in GridView1.Rows)
        {
            if ((row.FindControl("chkSelect") as CheckBox).Checked)
            {
                string filePath = (row.FindControl("lblFilePath") as Label).Text;
                zip.AddFile(filePath, "Files");
            }
        }
        Response.Clear();
        Response.BufferOutput = false;
        string zipName = String.Format("Zip_{0}.zip", DateTime.Now.ToString("yyyy-MMM-dd-HHmmss"));
        Response.ContentType = "application/zip";
        Response.AddHeader("content-disposition", "attachment; filename=" + zipName); 
        zip.Save(Response.OutputStream);
        Response.End();
    }
}

 

فایل های ضمیمه