在 ASP.NET 網站,有時我們希望產生壓縮檔供使用者下載,例如下圖
這邊我們借用 SharpZipLib 組件,來幫我們完成。可由這邊下載
我們希望產生壓縮檔的過程中,不在 Server 端產生實體檔案。
程式碼範例
using ICSharpCode.SharpZipLib.Zip;
namespace TestSharpZipLib {
public partial class WebForm1 : System.Web.UI.Page {
protected void Page_Load(object sender, EventArgs e) {
if (!IsPostBack) {
//取得檔案(記憶體串流),[模擬]。
MemoryStream oMS = GetFileData();
Response.Clear();
Response.ContentType = "application/octet-stream";
Response.AddHeader("Content-Disposition", "attachment;FileName=" +
HttpUtility.UrlEncode("測試" + ".zip", System.Text.Encoding.UTF8));
//傳入輸出串流
using (ZipOutputStream zipOutput = new ZipOutputStream(Response.OutputStream)) {
//傳入欲壓縮檔案的名稱
ZipEntry zipEntry = new ZipEntry(string.Concat("測試", ".xls"));
zipOutput.PutNextEntry(zipEntry);
ICSharpCode.SharpZipLib.Core.StreamUtils.Copy(oMS, zipOutput, oMS.ToArray());
zipOutput.Finish();
Response.Flush();
Response.End();
}
}
}
private MemoryStream GetFileData() {
MemoryStream oMS = null;
FileInfo oFileInfo = new FileInfo(Server.MapPath("~/test.xls"));
using (FileStream oFS = oFileInfo.OpenRead()) {
byte[] btData = new byte[oFS.Length];
oFS.Read(btData, 0, btData.Length);
oFS.Close();
oMS = new MemoryStream(btData);
}
return oMS;
}
}
}
若使用「泛型處理常式」統一處理這類問題,是不錯的選擇。
0 Comments:
張貼留言