摘要:[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();
}
完成後實際測試如下:
範例下載:
參考資料:
http://dotnetzip.codeplex.com/
http://cheeso.members.winisp.net/DNZHelp/#
以上文章敘述如有錯誤及觀念不正確,請不吝嗇指教
如有侵權內容也請您與我反應~謝謝您 :)