【发布时间】:2010-08-11 11:44:46
【问题描述】:
我在尝试下载动态生成的 zip 文件时遇到了非常奇怪的错误。 在某些客户端计算机上一切正常,文件下载完美,在其他计算机上存在服务器异常(我正在尝试使用不同的浏览器进行测试):
消息: 你调用的对象是空的 堆栈跟踪: • ASP.development_detail_aspx.__RenderContent1(HtmlTextWriter __w, Control parameterContainer) • System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children) • System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children) • System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children) Web.UI.HtmlControls.HtmlForm.RenderChildren(HtmlTextWriter writer) - System.Web.UI.HtmlControls.HtmlForm.Render(HtmlTextWriter 输出) - System.Web.UI.HtmlControls.HtmlForm.RenderControl(HtmlTextWriter writer) - System.Web. UI.Control.RenderChildrenInternal(HtmlTextWriter 编写器,ICollection 子级)× System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter 编写器,ICollection 子级)× System.Web.UI.Page.Render(HtmlTextWriter 编写器)× System.Web.UI。 Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
我在 asp:ImageButton OnClick 事件中的代码。服务器是 IIS 7.5:
...
using (MemoryStream output = new MemoryStream())
{
using (ZipOutputStream s = new ZipOutputStream(output))
{
s.SetLevel(5); // 0 - store only to 9 - means best compression
byte[] buffer = new byte[4096];
foreach (var file in devFiles)
{
if (file.PhisicalName != "")
{
ZipEntry entry = new ZipEntry(file.RealName);
s.PutNextEntry(entry);
using (FileStream streamer = File.OpenRead(HttpContext.Current.Server.MapPath(file.PhisicalName)))
{
int sourceBytes;
do
{
sourceBytes = streamer.Read(buffer, 0, buffer.Length);
s.Write(buffer, 0, sourceBytes);
}
while (sourceBytes > 0);
}
}
}
s.Finish();
HttpResponse response = HttpContext.Current.Response;
response.Clear();
response.ContentType = "application/octet-stream";
response.AppendHeader("Content-Disposition", "attachment; filename=doc.zip");
response.AppendHeader("Content-Length", output.Length.ToString());
response.BinaryWrite(output.ToArray());
response.End();
output.Close();
s.Close();
}
【问题讨论】:
-
输出在哪里声明和初始化?
-
压缩文件的大小是多少?由于服务器上没有足够的内存供 w3wp 进程加载附件,我曾经看到过类似的情况
-
我已经更新了代码。文件大小约为10M。但它适用于某些客户......在一些不适用..
标签: asp.net