我有一个asp.net页面,它将文件的内容发送到客户端,因此浏览器会显示另存为对话框来下载文件。此页面显示在弹出窗口中,当用户单击保存按钮时,它会自动关闭并开始下载。
在windows服务器2003上,它运行良好。在其他浏览器的vista上,也可以正常工作。但当我尝试IE7&Vista,弹出窗口打开,大约一秒钟后关闭,不显示文件下载对话框。我该如何解决这个问题?
我用于生成响应的代码是:
FileStream fileStream = new FileStream(filePath, FileMode.Open);
int fileSize = (int)fileStream.Length;
byte[] buffer = new byte[fileSize];
fileStream.Read(buffer, 0, (int)fileSize);
fileStream.Close();
Response.Clear();
Response.Buffer = true;
Response.BufferOutput = true;
Response.ContentType = "application / octet - stream";
Response.AddHeader("Content-Length", buffer.Length.ToString());
Response.AddHeader("Content-Disposition", "attachment; filename=" + filename);
Response.AddHeader("Extension", Path.GetExtension(filename));
Response.ContentEncoding = System.Text.Encoding.GetEncoding("windows-1254");
Response.BinaryWrite(buffer);
Response.Flush();
Response.End();
我用以下javascript打开弹出窗口:
window.open ('Download.aspx?filename=somefile.ext','downloadWindow','location=0,status=0,scrollbars=0,width=1,height=1');
编辑:我更正了空格,但遗憾的是它们不是问题所在。
第2版::似乎这个问题与Vista无关,只与IE有关。我还发现,当项目在本地开发服务器上运行时,它工作得很好,但当连接到发布服务器时,它无法下载文件。
尝试删除ContentType
中的空格。标准为application/octet-stream
。
两件事。
- 如前所述,您将希望删除类型中的空格
- 是否有任何特殊原因导致您没有使用"响应"。TransmitFile()而不是自己读取文件
我还建议您在文件名周围添加引号,否则,如果文件名中包含空格,它将在Firefox中被截断。
我不能指出代码中的特定问题(可能除了那个内容类型,它看起来格式不好;不确定这是否有区别)。以下是我为此使用的代码,它在IE7和Firefox中都有效:
Response.ContentType = "application/x-download";
Response.AddHeader("Content-Disposition", "attachment; filename=" + fileName);
Response.CacheControl = "public";
Response.OutputStream.Write(byteArr, 0, byteArr.Length);
Response.End();
我认为您的问题可能是IIS 7。使用集成管道模式的新Internet信息服务器中的"addHeader"存在问题。
尝试使用"响应"。AppendHeader。
我也遇到了同样的问题。。。我使用了这个解决方案(我在按钮上使用它。点击):
Response.ContentType = "text/txt";
Response.AppendHeader("Content-Disposition", "attachment; filename="+DownloadFileName);
Response.Write(MyFileContent_Text_);
Response.End();
它刚刚起作用!!
我看到这篇文章是因为我遇到了一个类似的问题。我在Windows7上运行IE8。
在本地机器上调试时,我可以显示文件下载提示,但当单击"保存"或"打开"时,下载进度窗口会显示约半秒,然后突然关闭,没有下载任何内容。
我为Internet Explorer安装了一个名为IE7Pro的插件。它附带了一个我启用的下载管理器。当我禁用它时,我的问题就消失了,我可以打开或保存我的文件。
希望这能对其他人有所帮助。