经典的asp大文件下载

时间:2014-03-30 20:30:39

标签: asp-classic

我有一个经典的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 

%>

1 个答案:

答案 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组件抛出了错误:无法打开文件。