对于某些用户,经典 ASP 内容类型 XLS Chrome 下载为 .asp 文件

Posted

技术标签:

【中文标题】对于某些用户,经典 ASP 内容类型 XLS Chrome 下载为 .asp 文件【英文标题】:Classic ASP Content-type XLS Chrome downloads as .asp file for some users 【发布时间】:2012-07-22 23:38:12 【问题描述】:

我有一个经典的 asp 网站,其中包括将表格数据导出/下载为 excel 文件 (.xls) 的功能。这是通过使用此代码块代替通常的 html 标头将用户重定向到新页面来完成的:

sub PutInTopOfXLS(FileName)
    Response.Buffer = TRUE
    Response.CharSet="UTF-8"
    Response.CodePage=65001
    Response.ContentType = "application/vnd.ms-excel"
    Response.AddHeader "Content-Disposition", "attachment;filename=" & FileName%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns:x="urn:schemas-microsoft-com:office:excel">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
        <style>
        <!--table
        br mso-data-placement:same-cell;
        tr vertical-align:top;
        -->
        </style>
    </head>
    <body>  
<%end sub

这适用于 Firefox、Internet Explorer 和 Safari(适用于 Mac 和 Windows)上的所有用户(或至少没有报告任何问题),并且适用于我使用 Chrome (20.0.1132.57) 的开发机器。但是,我的 QA 人员报告说,在网站上的几个特定报告中,它总是使用实际代码页名称 ReportFileName.asp 在 Chrome 上下载,然后他收到有关 .asp 文件没有文件关联的 Windows 错误。如果他确实选择了用 Excel 打开,则说明已下载了正确的文件。我让我们办公室的另一个人下载Chrome,她没有问题;文件下载为 filename.xls 并正常打开。

我很困惑,因为对于 QA 人员来说,它只影响这一份报告,这表明问题出在特定报告中。但是,其他两个使用相同版本 Chrome 的用户没有遇到此问题这一事实表明这是他的 Chrome 设置中的问题。

我没有任何运气在谷歌上搜索解决方案或搜索 SO,所以我想我会把问题抛到那里,看看是否有人有任何想法。

非常感谢您的帮助。

【问题讨论】:

【参考方案1】:

我建议流式传输文件,这也可以让您以更好的方式处理大文件。

这是我的工作示例,我使用它来获取一些自动 csv 文件,这些文件存储在一个相当不友好的文件名中,我还使用这个脚本向最终用户呈现一个更好的文件名:

' Set some variables
strSourceFilename = "00008446.dat"
strNiceFilename = "Nice Name Here.csv"

' Read the file and stream  it back to the client
Const adTypeBinary = 1
Set BinaryStream = CreateObject("ADODB.Stream")
BinaryStream.Type = adTypeBinary
BinaryStream.Open
BinaryStream.LoadFromFile "C:\path\to\the\folder\" & strSourceFilename
ReadBinaryFile = BinaryStream.Read
Response.ContentType = "application/x-unknown"
Response.AddHeader "Content-Disposition", "attachment; filename=" & strNiceFilename
Response.BinaryWrite ReadBinaryFile

希望这会有所帮助!

【讨论】:

以上是关于对于某些用户,经典 ASP 内容类型 XLS Chrome 下载为 .asp 文件的主要内容,如果未能解决你的问题,请参考以下文章

为经典的 asp 站点启用日志记录

更新 Excel 工作表(在经典 ASP/Vbscript 中)

IIS ASP.NET 何时使用集成模式或经典模式?

应用程序变量对于经典的 asp 和 asp.net 是不是通用?

经典 ASP/ASP.NET 应用程序变量

如何在 Javascript 中获取给定 url 的内容类型?