我有一个经典的ASP网站,需要允许用户下载一个大文件(CSV,20 MB)。该文件存储在www根文件夹之外。我在Stackoverflow和其他网站上发现了一些代码示例,这些代码示例以块的形式发送文件但无法使其工作。 IE和Chrome都会出现错误“找不到此网页”。
这是我对asp文件的完整代码。我做错了什么?
<%@ LANGUAGE=VBScript %>
<%
s_getFile "D:\Data\Dev", "laser2.csv", "laser2"
Sub s_getFile(sPath, sfilename, sBaseName)
Response.Buffer = False
Server.ScriptTimeout = 30000
Response.ContentType = "application/octet-stream"
Response.AddHeader "Content-Disposition", "attachment; filename=" & sfilename
Set adoStream = CreateObject("ADODB.Stream")
adoStream.Open()
adoStream.Type = 1
adoStream.LoadFromFile(sPath & "\" & sBaseName)
iSz = adoStream.Size
Response.AddHeader "Content-Length", iSz' may be required
chunk = 2048
For i = 1 To iSz \ chunk
If Not Response.IsClientConnected Then Exit For
Response.BinaryWrite adoStream.Read(chunk)
Next
If iSz Mod chunk > 0 Then
If Response.IsClientConnected Then
Response.BinaryWrite adoStream.Read(iSz Mod chunk)
End If
End If
adoStream.Close
Set adoStream = Nothing
Response.End
End Sub
%>
答案 0 :(得分:3)
当我尝试删除以下行时,它可以正常工作。
Response.AddHeader "Content-Length", iSz
否则,我得到了#34;这个网页不可用&#34;错误(IIS没有响应)。我在Windows 7上的IIS 7.5上尝试这个。使用Fiddler,我看到IIS添加了&#34; Content-Length&#34;自动标题,所以你不必。
以下是指向another user experiencing the same thing的链接。
如果以上操作不起作用,则需要检查文件是否确实存在。从上面的代码中,文件应该是d:\data\dev\laser2
(没有csv扩展名!)。我使用了错误的文件名进行了测试,我得到了一个&#34;找不到这个网页&#34;错误。用Fiddler深入挖掘,我看到ADODB.Stream组件抛出了错误:无法打开文件。