文件下载不适用于IE7

时间:2008-10-16 15:18:17

标签: asp.net internet-explorer-7 download

我有一个asp.net页面,它将文件内容发送到客户端,因此浏览器会显示另存为对话框以下载文件。此页面以弹出窗口显示,当用户单击“保存”按钮时,它会自动关闭并开始下载。

在Windows Server 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有关。我还发现,当项目在本地开发服务器上运行时,它工作正常,但当连接到发布服务器时,它无法下载文件。

7 个答案:

答案 0 :(得分:8)

尝试删除ContentType中的空格。标准是application/octet-stream

答案 1 :(得分:2)

两件事。

  1. 如前所述,您需要删除类型
  2. 中的空格
  3. 您是否有任何特殊原因没有使用Response.TransmitFile()而不是自己阅读文件?

答案 2 :(得分:2)

我还建议您在文件名周围添加引号,否则,如果它包含空格,它将在Firefox中被截断。

答案 3 :(得分:1)

我无法指出您的代码中的特定问题(除了可能的内容类型,它看起来很糟糕;不确定这是否有所不同)。这是我用于此的代码,适用于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();

答案 4 :(得分:0)

我认为您的问题可能出在IIS 7上。使用集成管道模式的新Internet信息服务器中的“addHeader”存在问题。

尝试使用Response.AppendHeader。

答案 5 :(得分:0)

我也有同样的问题......我使用了这个解决方案(我在button.click上使用它):

Response.ContentType = "text/txt";
Response.AppendHeader("Content-Disposition", "attachment; filename="+DownloadFileName);
Response.Write(MyFileContent_Text_);
Response.End();

......它刚刚奏效!!

答案 6 :(得分:0)

我遇到过这篇文章,因为如果不是同一个问题,我会遇到类似的问题。我在Windows 7上运行IE8。

在本地计算机上进行调试时,我可以显示“文件下载”提示,但是当单击“保存”或“打开”时,“下载进度”窗口将显示大约半秒钟,然后突然关闭而不下载任何内容。

我为Internet Explorer安装了一个名为 IE7Pro 的插件。它附带了我启用的下载管理器。当我禁用它时,我的问题就消失了,我可以打开或保存我的文件。

希望这证明对那里的其他人有帮助。