【问题标题】:Classic asp large file download经典asp大文件下载
【发布时间】:2014-03-30 20:30:38
【问题描述】:

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

%>

【问题讨论】:

  • 您能否提供一些有关您的环境、操作系统、IIS 版本等的信息?

标签: asp-classic


【解决方案1】:

当我尝试删除以下行时,它起作用了。

Response.AddHeader "Content-Length", iSz

否则,我会收到“此网页不可用”错误(IIS 没有响应)。我正在 Windows 7 上的 IIS 7.5 上尝试此操作。使用 Fiddler,我看到 IIS 会自动添加“Content-Length”标头,因此您不必这样做。

这是another user experiencing the same thing的链接。

如果以上都不起作用,需要检查文件是否真的存在。从您上面的代码中,该文件应位于d:\data\dev\laser2(无 csv 扩展名!)。我使用错误的文件名进行了测试,并且出现“找不到此网页”错误。用 Fiddler 深入挖掘,我看到错误是由 ADODB.Stream 组件引发的:无法打开文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    • 2015-07-02
    • 1970-01-01
    • 2012-07-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多