首先我們先下載DotNetZip,解壓縮後將Ionic.Zip.dll放置到Web應用程式的Bin目錄下
接著在cs檔上方using
using System.IO; using System.Text; using Ionic.Zip;
由於多人同時打包壓縮下載可能會發生檔名衝突的問題,為了解決這個問題我們為個別使用者建立以使用者帳號為名的目錄,做為未來存放壓縮檔的位置,這裡以使用者Ken為例。
if (!Directory.Exists(@"D:\upload\tmp\Ken")) { Directory.CreateDirectory(@"D:\upload\tmp\Ken"); }
因為每次挑選的檔案不同,為了簡化壓縮檔的命名規則,統一命名為MyZip.zip,在檔案下載前清空使用者目錄下的壓縮檔
DirectoryInfo directory = new DirectoryInfo(@"D:\upload\tmp\Ken"); foreach (FileInfo file in directory.GetFiles()) { file.Delete(); }
接著輸入未來要存放壓縮檔的位置及檔名,並輸入要加入壓縮檔的檔案,若檔案不存在則會出現System.IO.FileNotFoundException,所以必須檢查檔案是否存在,這裡的例子以a.txt、b.txt做為要加入壓縮檔的檔案。
ZipFile zip = new ZipFile(@"D:\upload\tmp\Ken\MyZip.zip", Encoding.UTF8); if (File.Exists(@"D:\upload\a.txt")) { zip.AddFile(@"D:\upload\a.txt", ""); } if (File.Exists(@"D:\upload\b.txt")) { zip.AddFile(@"D:\upload\b.txt", ""); } zip.Save();
最後輸入下載的檔名及壓縮檔的位置及名稱即可。
Response.AddHeader("Content-Disposition", "attachment;filename=MyZip.zip"); Response.ContentType = "application/octet-stream"; Response.TransmitFile(@"D:\upload\tmp\Ken\MyZip.zip");
沒有留言:
張貼留言