스트리밍 다운로드(메모리 소비, 더 적게 사용)를 사용하거나 파일로 직접 이동할 수 있습니다.
<%
Const USE_STREAM = 0 '0. 스트림 없이 다운로드(Adodb.Stream) 1. 스트림으로 다운로드
Const ALLOW_FILE_EXT = "rar,zip,chm,doc,xls,swf,mp3,gif,jpg,jpeg,png,bmp" '다운로드한 파일의 확장자를 허용하여 소스 코드가 다운로드되지 않도록 합니다.
Dim sDownFilePath '다운로드 파일 경로
sDownFilePath = Trim(요청("파일 경로"))
'또는 전달된 파일 ID를 기반으로 데이터베이스에서 파일 경로를 가져옵니다
.' sDownFilePath가 절대 경로인 경우 sDownFilePath를 이 파일의 상대 경로로 변환해야 합니다.'DownFilePath
= "focus.swf"
DownloadFile(sDownFilePath)함수
호출
DownloadFile(s_DownFilePath)
'파일 이름이 전달되었는지 확인
IsNull(s_DownFilePath) = True 또는 Trim(s_DownFilePath) = ""인 경우
OutputErr "오류: 먼저 다운로드할 파일을 결정하세요. 다운로드에 실패했습니다."
End If
'확장이 합법적인지 확인합니다.
Dims_FileExt
s_FileExt = Mid(s_DownFilePath, InstrRev(s_DownFilePath, ".")+1)
InStr("," & ALLOW_FILE_EXT & ",", "," & s_FileExt & ",") <= 0이면
OutputErr "오류: 파일 형식(" & s_FileExt & ")은 다운로드가 허용되지 않아 다운로드에 실패했습니다."
종료 조건
s_DownFilePath = 바꾸기(s_DownFilePath, "", "/")
'보안상의 이유로 일부 디렉터리에서는 파일 다운로드가 금지되어 있으며 여기에서 처리됩니다.
'
'서버가 fso를 지원하는지 확인하세요.
희미한 o_Fso
오류 발생 시 다음 재개
o_Fso = Server.CreateObject("Scripting.FileSystemObject") 설정
Err.Number <> 0이면
Err.Clear
OutputErr "오류: 서버가 fso 구성 요소를 지원하지 않아 다운로드에 실패했습니다."
End If
'파일 이름, 파일 크기 가져오기
Dims_FileMapPath
희미한 o_File, s_FileName, n_FileLength
s_FileMapPath = 서버.MapPath(s_DownFilePath)
If (o_Fso.FileExists(s_FileMapPath)) = True Then
o_File = o_Fso.GetFile(s_FileMapPath) 설정
s_FileName = o_파일.이름
n_FileLength = o_File.Size
o_File.Close
또 다른
OutputErr "오류: 파일이 존재하지 않습니다. 다운로드에 실패했습니다."
종료 조건
Set o_Fso = Nothing
'다운로드한 파일 크기가 제한을 초과하는지 확인
'
'스트림으로 다운로드되지 않은 경우 해당 파일로 직접 이동하세요.
USE_STREAM = 0이면
응답.리디렉션 sDownFilePath
응답.끝
End If
'서버가 Adodb.Stream을 지원하는지 감지합니다.
오류 발생 시 다음 재개
o_Stream = Server.CreateObject("Adodb.Stream") 설정
Err.Number <> 0이면
Err.Clear
OutputErr "오류: 서버가 Adodb.Stream 구성 요소를 지원하지 않아 다운로드에 실패했습니다."
o_Stream.Tyep = 1
인 경우 종료
o_Stream.Open
o_Stream.LoadFromFile s_FileMapPath
Response.Buffer = True
응답.지우기
Response.AddHeader "Content-Disposition", "attachment; filename=" & s_FileName
Response.AddHeader "콘텐츠 길이", n_FileLength
Response.CharSet = "UTF-8"
Response.ContentType = "응용 프로그램/옥텟 스트림"
응답.BinaryWrite o_Stream.Read
응답.플러시
o_Stream.Close
End Function
Sub OutputErr(s_ErrMsg)
설정
응답."<font color=red>" & s_ErrMsg & "</font>" 쓰기
응답.종료
하위 끝
%>
http://www.cnblogs.com/jiny-z/archive/2006/08/29/489102.html