2014-03-30 4 views
0

사용자가 대용량 파일 (CSV, 20MB)을 다운로드 할 수 있어야하는 고전적인 ASP 웹 사이트가 있습니다. 파일은 www 루트 폴더 외부에 저장됩니다. Stackoverflow와 그 파일을 청크로 보내는 다른 웹 사이트에서 코드 예제를 발견했지만 작동시키지 못했습니다. IE와 크롬 모두 "이 웹 페이지를 찾을 수 없습니다"오류가 발생합니다.클래식 asp 대용량 파일 다운로드

다음은 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

환경, OS, IIS 버전 등에 대한 정보를 제공 할 수 있습니까? – Lankymart

답변

3

다음 줄을 제거하려고하면 작동합니다.

Response.AddHeader "Content-Length", iSz 

그렇지 않으면 "이 웹 페이지를 사용할 수 없습니다."라는 오류가 발생합니다 (IIS가 응답하지 않습니다). 나는 Fiddler를 사용하여 IIS가 "Content-Length"헤더를 자동으로 추가하는 것을 보았으므로 그렇게하지 않아도됩니다.

여기는 another user experiencing the same thing에 대한 링크입니다.

위의 방법으로 문제가 해결되지 않으면 파일이 실제로 존재하는지 확인해야합니다.. 위의 코드에서 파일은 d:\data\dev\laser2 (CSV 확장 없음!)이어야합니다. 잘못된 파일 이름을 사용하여 테스트 한 결과 "이 웹 페이지를 찾을 수 없습니다"오류가 발생했습니다. Fiddler를 심층적으로 살펴보면 ADODB.Stream 구성 요소에서 오류가 발생하는 것으로 나타났습니다. 파일을 열 수 없습니다.