ストリーミング ダウンロードを使用することも (メモリを消費し、使用量を減らします)、ファイルに直接アクセスすることもできます。
<%
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(Request("FilePath"))
' または、渡されたファイル ID に基づいてデータベースからファイル パスを取得します
' sDownFilePath が絶対パスの場合は、必ず sDownFilePath をこのファイルへの相対パスに変換してください。DownFilePath
= "focus.swf"
Call DownloadFile(sDownFilePath)
Function 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 = Replace(s_DownFilePath, "", "/")
'セキュリティ上の理由から、一部のディレクトリではファイルのダウンロードが禁止されており、ここで処理されます。
'
'サーバーが fso をサポートしているかどうかを確認します
ディム・オ・フソ
エラー時は次へ再開
Set o_Fso = Server.CreateObject("Scripting.FileSystemObject")
Err.Number <> 0 の場合、次に
エラークリア
OutputErr "エラー: サーバーは fso コンポーネントをサポートしていないため、ダウンロードに失敗しました"
End If
'ファイル名、ファイルサイズを取得
Dims_FileMapPath
Dim o_File、s_FileName、n_FileLength
s_FileMapPath = Server.MapPath(s_DownFilePath)
(o_Fso.FileExists(s_FileMapPath)) = True の場合
o_File = o_Fso.GetFile(s_FileMapPath) を設定します。
s_FileName = o_File.Name
n_FileLength = o_File.Size
o_File.Close
それ以外
OutputErr "エラー: ファイルが存在しないため、ダウンロードに失敗しました"
終了の場合
Set o_Fso = Nothing
'ダウンロードしたファイルのサイズが制限を超えているかどうかを判断します
'
'ストリームでダウンロードされない場合は、ファイルに直接アクセスします
USE_STREAM = 0 の場合
Response.Redirect sDownFilePath
応答.終了
End If
'サーバーが Adodb.Stream をサポートしているかどうかを検出します
エラー時は次へ再開
Set o_Stream = Server.CreateObject("Adodb.Stream")
Err.Number <> 0 の場合、次に
エラークリア
OutputErr "エラー: サーバーは Adodb.Stream コンポーネントをサポートしていないため、ダウンロードに失敗しました"
o_Stream.Type = 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 = "アプリケーション/オクテットストリーム"
Response.BinaryWrite o_Stream.Read
Response.Flush
o_Stream.Close
Set o_Stream = Nothing
End Function
Sub OutputErr(s_ErrMsg)
Response.Write "<font color=red>" & s_ErrMsg & "</font>"
応答.終了
End Sub
%>
http://www.cnblogs.com/jiny-z/archive/2006/08/29/489102.html