4

ASP Classic で構築されている Web サイトがあり、ユーザーがファイルをダウンロードできるようにするスクリプトで問題が発生していますが、ファイルへのパスは隠されています。

ユーザーがページにアクセスすると、リンクが表示されます。リンクは次のようにコーディングされます。

<a href="download.asp?file=FILE-NAME-HERE" target="_blank">Download File</a>

このリンクをクリックすると、ファイルを取得して配信するためのコードが実行される download.asp に移動します。これが私が今持っているコードです:

<%
const adTypeBinary = 1
dim strFilePath, strFile

strFilePath = "/_uploads/private/" 
strFile = Request.QueryString("file") 

if strFile <> "" then
    'Set the content type to the specific type that you are sending.
     Response.ContentType = "application/octet-stream"
     Response.AddHeader "Content-Disposition", "attachment; filename=" & strFile

     set objStream = Server.CreateObject("ADODB.Stream")
     objStream.open
     objStream.type = adTypeBinary
     objStream.LoadFromFile(strFilePath & strFile)

    response.binarywrite objStream.Read

    objStream.close
    Set objStream = nothing

end if
%>

このコードは、このサイトの両方の質問 (クラシック ASP で vbscript を使用してファイルをダウンロードする方法) とhttp://support.microsoft.com/kb/276488からまとめました。

しかし、ファイルが Web ディレクトリ "/_uploads/private/" に正しくあるにもかかわらず、download.asp ページで "ファイルが見つかりません" というエラーが表示されます。

ファイルの種類は、pdf、xls、docx などのいくつかのいずれかです。

私のコードに、ファイルが見つからないようにする何かがありますか?

4

1 に答える 1

3

上記のコメントで、ユーザーのオラクル認定プロフェッショナルに感謝します。

機能したのは、ファイルの場所を解決するために「Server.MapPath」を追加することでした。

使用する代わりに:

objStream.LoadFromFile(strFilePath & strFile)

私はそれを次のように変更しました:

objStream.LoadFromFile(Server.MapPath(strFilePath & strFile))

これで、リンクによってファイルが適切にダウンロードされます。

于 2013-11-05T14:33:58.613 に答える