我有一个经典的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)的开发计算机。但是,我的质量保证人员在网站上的几个特定报告中报告,它总是在Chrome上下载实际代码页名称ReportFileName.asp,然后他收到一个关于.asp文件没有文件关联的Windows错误。如果他实际选择使用Excel打开,则已下载正确的文件。我问我们办公室的另一个人下载Chrome,她没有问题;该文件下载为{filename} .xls并正常打开。
我很困惑,因为对于质量保证人来说,只影响这一份报告会表明问题出在特定的报告中。但是,具有相同版本Chrome的其他两个用户没有遇到此问题的事实表明这是Chrome设置中的内容。
我没有任何运气谷歌搜索解决方案或搜索SO所以我想我会把问题扔出去,看看是否有人有任何想法。
非常感谢您的协助。
答案 0 :(得分:0)
我建议流式传输文件,这样你就可以更好地处理大文件了。
这是我的工作示例,我使用它来获取一些存储在一个相当不友好的文件名中的自动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
希望这有帮助!