[ASP.NET] 使用 DotNetZip Library 壓縮及解壓Zip檔案

摘要:[ASP.NET] 使用 DotNetZip Library 壓縮及解壓Zip檔案

在ASP.NET中如果需要壓縮及解壓縮檔案時,除了本身提供的 System.IO.Compression 命名空間外,

還有別種選擇,例如使用 DotNetZip Library,

DotNetZip 是一個簡單精簡的函式庫,使用上很便利。

 

首先至 http://dotnetzip.codeplex.com/ 下載Library,有裝NuGet的朋友也可以在NuGet中直接搜尋 DotNetZip 下載即可,

並且將 Ionic.Zip.dll 加入網站參考中,

 

接下來實際來做看看該如何處理檔案壓縮與解壓縮。

 

建立一個asp.net網頁,加入以下HTML編碼


    <div>
        <asp:FileUpload ID="FileUpload1" runat="server" />
        <br />
        <asp:Button ID="Button1" runat="server" Text="上傳並壓縮檔案" onclick="Button1_Click" />
        <br />
        <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
        <br />
        <asp:Button ID="Button2" runat="server" Text="解壓檔案" onclick="Button2_Click" />
        <br />
        <asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
        <br />
        <asp:Button ID="Button3" runat="server" Text="壓縮下載" onclick="Button3_Click" />
    </div>

這邊的做法是利用 FileUpload 控制項,將檔案上傳到Server後在進行壓縮與解壓縮,

接著在後置程式碼中加入以下方法:

1. 上傳檔案與壓縮方法


    protected void Button1_Click(object sender, EventArgs e)
    {
        // 檢查檔案是否存在
        if (FileUpload1.HasFile)
        {
            try
            {
                string filePath = Server.MapPath(dirPath) + FileUpload1.FileName;
                string zipPath = "";
                // 儲存檔案
                FileUpload1.SaveAs(filePath);
                // 壓縮檔案
                using (ZipFile zip = new ZipFile())
                {
                    zip.Password = "arvin"; // 加入密碼
                    zip.AddFile(filePath, "");
                    zipPath = string.Format("{0}{1}\\{2}.zip", Server.MapPath(dirPath), "Compress", DateTime.Now.ToString("yyyyMMddHHmmss"));
                    zip.Save(zipPath);
                }
                TextBox1.Text = zipPath;
                TextBox2.Text = filePath;
            }
            catch (Exception)
            {
                throw;
            }
        }
    }

在這邊提醒一下,DotNetZip 支援多檔案壓縮,只要在增加  zip.AddFile(filePath, "");  這行程式及可。
 

2.解壓縮檔案方法


    protected void Button2_Click(object sender, EventArgs e)
    {
        string zipFilePath = TextBox1.Text;
        // 檢查檔案是否存在
        if (File.Exists(zipFilePath))
        {
            try
            {
                var options = new ReadOptions { StatusMessageWriter = System.Console.Out };
                using (ZipFile zip = ZipFile.Read(zipFilePath, options))
                {
                    zip.Password = "arvin"; // 解壓密碼
                    zip.ExtractAll(Server.MapPath(dirPath) + "Extract\\");  // 解壓全部
                }
            }
            catch (Exception)
            {
                throw;
            }
        }
    }

3.將檔案壓縮後下載方法


    protected void Button3_Click(object sender, EventArgs e)
    {
        string filePath = TextBox2.Text;

        Response.Clear();
        Response.ContentType = "application/zip";
        Response.AddHeader("content-disposition", "filename=" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".zip");

        using (ZipFile zip = new ZipFile())
        {
            zip.AddFile(filePath, "");
            zip.Save(Response.OutputStream);
        }
        Response.End();
    }

 

完成後實際測試如下:

 

 

範例下載:

TDotNetZip.rar

 

參考資料:

http://dotnetzip.codeplex.com/

http://cheeso.members.winisp.net/DNZHelp/#

 

 


以上文章敘述如有錯誤及觀念不正確,請不吝嗇指教
如有侵權內容也請您與我反應~謝謝您 :)