某些页面上的IE8下载文件不起作用

时间:2013-04-11 13:08:20

标签: c# asp.net internet-explorer-8 download f5

我正在开发一个应用程序,允许用户下载带有常规内容的excel文件(不大于几Mb)。

在IE9上,文件被完美下载,但在IE8上,一些允许下载的页面不起作用。

新页面会立即打开并关闭,而不会显示下载栏。

缓存控制标头设置为private。

我已禁用所有IE8添加内容。

我已经将服务器的响应与允许保存文件的页面和不起作用的页面匹配,并且它们完全匹配(除了路径)

我不知道为什么在某些情况下文件会完全下载而在其他情况下它不会。

以下是我用来下载文件的服务器端代码:

protected void GetExportedFile()
{
    string filename = Form("filename");

    if (string.IsNullOrEmpty(filename))
    {
        Logger.Instance.Write("GetExportedFile is missing the parameter filename");
        Response.Redirect("ErrorPage.aspx");
    }

    string filePath = Context.Server.MapPath("****/****/" + filename);

    Response.ClearHeaders();
    Response.ClearContent();
    SetContentType(ContentType.Excel);
    Response.AddHeader("Content-Disposition", string.Format("attachment; filename={0}", filename));
    Response.WriteFile(filePath);

    Response.Flush();

    try
    {
        File.Delete(filePath);
    }
    catch (Exception ex)
    {
        Logger.Instance.Write(
            "GetExportedFile failed to delete the file '" + filePath + 
            "', Error: " + ex.ToString(), "Error");
    }

    try
    {
        Response.End();
    }
    catch (ThreadAbortException ex)
    {
        //Don't add anything here.
        //because if you write here in Response.Write,
        //that text also will be added to your text file.
    }
}

我不得不提一下,虽然我不认为在下载之前无法在IE8上运行,但是如果excel生成已完成,我正在进行一些ajax调用以获取通知,而在我工作的页面上不要这样做。

我还想补充一点,我的应用程序位于应用程序防火墙(F5)后面,当停用时,所有下载都可以在IE8上运行,问题是我没有看到响应有任何变化。

感谢

1 个答案:

答案 0 :(得分:1)

如果有人看到这篇文章,我找到了问题的原因。 IE8有一个安全策略,不允许直接从脚本请求调用文件下载。

由于我调用了一系列调用文件创建状态的服务器的ajax调用,当文件准备好发出下载调用时,IE已经取消了它。

要覆盖IE8策略,当文件创建完成后,我已经为客户端添加了一个窗口,其中包含指向该文件的链接,当单击该链接时,文件已成功下载。

我希望有一天能帮到别人......