【问题标题】:Why doesn't Content-Disposition header work in IE 8?为什么 Content-Disposition 标头在 IE 8 中不起作用?
【发布时间】:2013-06-14 21:33:42
【问题描述】:

我正在尝试将文本文件 (CSV) 流式传输到响应,并且以下代码在 Firefox 3 中完美运行,但是当我使用 IE 时,它看起来想要下载实际的 .aspx 页面,并抱怨文件内容与文件扩展名或类型不匹配。如果我然后选择下载文件,它会正确下载 CSV 数据并在 Excel 中打开它。我做错了什么?

    DataTable dt = ExtensionsProvider.ListPrivateCallCostsForCsv(reportFilter.BusinessUnit, reportFilter.StartDate,
                                                             reportFilter.EndDate);
    Response.Clear();
    Response.Buffer = true;
    Response.ContentType = "text/csv";
    Response.AddHeader("Content-Disposition", "filename=" + GetExportFileName()); 
    DataTableHelper.WriteCsv(dt, Response.Output, false);
    Response.End();

【问题讨论】:

    标签: asp.net


    【解决方案1】:
    Response.AddHeader("Content-Disposition", "filename=" + GetExportFileName());
    

    应该是:

    Response.AddHeader("Content-Disposition", "attachment;filename=" + GetExportFileName());
    

    如果没有主要的Content-Disposition 值,IE 将只使用 URL 的尾部 — something.aspx — 作为文件名。

    (以上假设 GetExportFileName() 返回一个去除了大多数标点符号的净化文件名。在 IE 中作为标记或带引号的字符串在标头参数中的内容有些烦人;有关详细信息,请参阅 this question

    【讨论】:

      【解决方案2】:

      它也不适用于内联。当然它适用于所有其他浏览器

      HttpServletResponse response = aCtx.getResponse();
      response.setContentType("text/plain");
      response.addHeader("Content-Disposition", "inline;filename=log.txt");
      

      【讨论】:

        【解决方案3】:

        除了文件名参数之外,您还必须提供 Content-Disposition 标头的值。

        你可能有more luck with the "inline" value而不是“附件”值:

        Response.AddHeader("Content-Disposition", "inline;filename=" + GetExportFileName());
        

        【讨论】:

          猜你喜欢
          • 2014-02-03
          • 2011-02-02
          • 2012-02-27
          • 1970-01-01
          • 2016-12-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多