我正在尝试将文本文件(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();
bobince.. 9
Response.AddHeader("Content-Disposition", "filename=" + GetExportFileName());
应该:
Response.AddHeader("Content-Disposition", "attachment;filename=" + GetExportFileName());
没有主Content-Disposition
值,IE将只使用URL的尾部 something.aspx
- 作为文件名.
(上面假设GetExportFileName()
返回一个被删除大多数标点符号的清理文件名.在IE中使用标题参数作为标记或带引号的字符串是一个令人烦恼的问题 ;有关详细信息,请参阅此问题)
Response.AddHeader("Content-Disposition", "filename=" + GetExportFileName());
应该:
Response.AddHeader("Content-Disposition", "attachment;filename=" + GetExportFileName());
没有主Content-Disposition
值,IE将只使用URL的尾部 something.aspx
- 作为文件名.
(上面假设GetExportFileName()
返回一个被删除大多数标点符号的清理文件名.在IE中使用标题参数作为标记或带引号的字符串是一个令人烦恼的问题 ;有关详细信息,请参阅此问题)