ASP を使用して特定のユニットの Web ページを作成したときに、このような問題が発生しました。そのユニットの以前の MIS システムでは、いくつかの Word ファイルがバイト ストリームの形式でデータベースに保存されていました。現在、ユーザーはこれらの Word ファイルを抽出するために ASP を使用するように要求しています。データベースからデータを取り出してWebページに表示します。当初は当然、サーバー上に一時ファイルを作成し、その一時ファイルへのリンクをWebページに追加することを考えましたが、この方法ではサーバーの負荷が大幅に増加するため、一時ファイルをどのように確保するかが問題になります。特定のクライアントが使用するファイルがサービス上で保証されること、およびファイルがユーザーに転送された後にファイルを削除する方法など、実際には解決が困難です。では、もっと良い方法はあるのでしょうか?
このため、ASP リファレンス ブックを注意深く確認したところ、Response オブジェクトには、サーバーからクライアントに送信されるコンテンツの MIME タイプを定義する contenttype という属性があることがわかりました。 MIME の正式名は MultiPurpose Internet Mail Extensions で、多目的インターネット メール拡張機能です。 Web プログラミングでは、Word または Excel ファイルへのハイパーリンクを指定することがあります。ユーザーがリンクをクリックすると、ブラウザーが対応するメソッドを自動的に呼び出してファイルを開きます。これが可能な理由は、ユーザーのマシンに Office をインストールした後、対応する MIME リソース タイプがブラウザーに登録されるためです。たとえば、Word ファイルの MIME タイプは Application/msword (前者は MIME タイプ、後者は MIME サブクラス)、Excel ファイルの MIME リソース タイプは Application/msexcel です。実際、ブラウザが処理できるすべてのリソースには、対応する MIME リソース タイプがあります。たとえば、HTML ファイルの MIME タイプは Text/html、JPG ファイルの MIME タイプは Image/JPG です。ブラウザはサーバーとのやり取りにおいて、受信したデータのMIMEタイプに基づいてどのような処理を行うかを決定し、HTMLやJPGなどのファイルの場合はブラウザが直接開きます。の場合、ブラウザーは単独でファイルを開くことはできません。対応するメソッドを呼び出すことによってファイルが開かれます。 MIME タイプがマークされていないファイルの場合、ブラウザは拡張子とファイルの内容に基づいてそのタイプを推測します。ブラウザがそれを推測できない場合は、それを application/octet-stream として渡します。さまざまなファイルの MIME タイプを理解するには、win98 の [マイ コンピュータ] -> [表示] -> [フォルダ オプション] -> [ファイル タイプ] で確認してください。
そこで私はアイデアを思いつき、ASP ではまず WORD データをバイト ストリームとして取り出し、次にその contenttype 属性を Application/msword としてマークし、クライアントがこのリソースを受け取った後にクライアントに送信できると考えました。 MIME タイプを指定し、クライアント コンピュータ上の Word を自動的に呼び出します (もちろん、Word がクライアント コンピュータにインストールされていることが前提です。そうでない場合、認識されないリソースとして扱われ、ユーザーに開かずに保存するよう求められます)。開けてください。テスト結果は非常に良好で、方法はシンプルかつ高速で、ブラウザは埋め込みモード (OLE モードと同様) を使用して IE5 で開き、効果はさらに優れています。以下が番組内容です。
テーブル名が tab_word であるとします。テーブルには 2 つのフィールドがあり、1 つは Word データの一意の識別子として使用される id という名前のフィールドで、もう 1 つは Word データを保存する worddata という名前の Blob タイプです。ここで、ID が 1 の Word ファイルの内容をページに表示したいとします。ASP プログラムは次のとおりです。
< %
' conn - 作成されたデータベース接続
'rs -- 結果セット
rs = conn.execute(選択
tab_word の worddata (id = 1))
response.contenttype = アプリケーション/msword
応答.writebinary(rs(worddata))
'writebinary を使用して結果セット内のデータを直接送信するように注意し、変数は使用しないでください
'このデータを受信してください。そうでないとシステムがエラーを報告します
%>
同様の方法を使用して、Excel、Bmp、その他多くの種類のデータを処理することもできます。