我試圖創建一個ZIP文件,它可能包含幾千張圖片。HttpContext.Current.Response在下載管理器啓動後寫入文件
公共靜態無效CompressAndSendFiles(列表文件) { HttpContext.Current.Response.ClearContent();
// LINE1: Add the file name and attachment, which will force the open/cance/save dialog to show, to the header
HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment; filename=\"Jpeg Package "
+ DateTime.Now.ToString("MM-dd-yyyy hh-mm-ss") + ".zip\"");
// Add the file size into the response header
//HttpContext.Current.Response.AddHeader("Content-Length", file.Length.ToString());
// Set the ContentType
HttpContext.Current.Response.ContentType = ReturnHttpContentType("download.zip");
ZipOutputStream oZipStream =
new ZipOutputStream(HttpContext.Current.Response.OutputStream);
try
{
foreach (string file in files)
{
FileInfo fInfo = new FileInfo(file);
ZipEntry oZipEntry = new ZipEntry(fInfo.Name);
oZipStream.PutNextEntry(oZipEntry);
byte[] buffer = File.ReadAllBytes(file);
oZipStream.Write(buffer, 0, buffer.Length);
//oZipStream.Flush();
}
}
catch (Exception ex)
{
throw ex;
}
finally
{
oZipStream.Finish();
oZipStream.Close();
oZipStream.Dispose();
}
HttpContext.Current.Response.OutputStream.Flush();
HttpContext.Current.Response.End();
}
一切都很好,除非當文件數量變大。
我的問題: 有沒有辦法啓動下載(讓客戶端的下載管理器彈出),然後開始寫入流?
我監視了w3wp.exe(IIS)進程,看起來數據正在寫入內存而不是Stream。當w3wp.exe內存使用率增加一定數量時,它會釋放內存並且什麼都不會發生(無需下載)。
預先感謝您。
快樂250k代表! (好吧,還不是很好,但是當它命中:)) – RCIX 2010-12-17 21:19:55
謝謝你的工作!沒有你是C#神的雙倍! – 2010-12-17 21:24:22
嗨Arash,我遇到了同樣的問題。你能否展示最終的代碼如何解決這個問題。 – 2011-03-28 13:52:53