誰もがこのような経験があると思います。クライアント マシンに Office がインストールされている場合、ページ上に Word ファイルを指すリンクがあり、クライアント マシンに Office がインストールされていない場合は、リンクをクリックすると Word が開かれて参照されます。インストールされている場合、リンクをクリックすると [保存] ダイアログ ボックスが表示されます。要約すると、ブラウザはファイルの種類を認識すると自動的に開き、認識しない場合は保存するように要求します。しかし、場合によっては、ファイルの種類に関係なく、ファイルを開かないでクライアントに直接保存してもらいたいと考えることがあります。この要件を達成するには、サーバーのハード ディスクに保存されたファイルについては、ASPUpload コンポーネントの SendBinary メソッドを使用する必要があります。データベースに保存されたファイルについては、レコード セットを開いてバイナリ データをクライアントに直接出力するだけです。 . ただし、ファイルの MIME タイプ、ファイル名、ファイル サイズをブラウザーに伝える必要があります。
1. サーバーのハードドライブ上のファイル
<%
ディムアップロード、ファイルパス
アップロード = Server.CreateObject(Persits.Upload) を設定します
ファイルパス = Server.MapPath(.) & / & 2003529213019.txt
'SendBinary パラメーターの説明:
'パラメータ 1: ファイルの物理パス
'パラメータ 2: ファイルの MIME タイプとその他の情報をブラウザに送信するかどうか
'パラメータ 3: ファイル タイプ。特定の MIME タイプを指定できますが、通常は application/octet-binary を使用できます。
'パラメータ 4: クライアントがファイルを保存するか、直接開くことができます。 True: 保存、False (デフォルト): 開く
Upload.SendBinary FilePath,True,application/octet-binary,True
%>
2. サーバー側データベース内のファイル
<%
薄暗いobjConn、objRs
objConn = Server.CreateObject(ADODB.Connection) を設定します。
set objRs = Server.CreateObject(ADODB.RecordSet)
objConn.open Driver={Microsoft Access Driver (*.mdb)};dbq= & Server.MapPath(db1.mdb)
objRs.open select * from t5 where id=2,objConn,1,3
Response.ContentType = アプリケーション/オクテットストリーム
Response.AddHeader Content-Disposition,attachment;filename= & objRs(filename)
Response.AddHeader Content-Length,CStr(objRs(size)) 'ここでは CStr 変換を使用する必要があります
Response.BinaryWrite objRs(ファイル)
objRs.close
objRs = 何も設定しない
objConn.close
objConn = 何も設定しない
%>
この方法では、ファイルを保存するときにファイル名とファイル サイズを同時に保存する必要があります。ファイル名とサイズが指定されていない場合、ブラウザがファイルの種類を認識すれば自動的に開きますが、認識できなければ、クライアントはファイルを保存するよう求められます。