要約: ブラウザ/サーバーベースのアプリケーション環境では、さまざまな種類のファイルをブラウザにアップロードすることが、常にユーザーのファイル管理アプリケーションを悩ませる問題の 1 つでした。 HTTP でファイルをアップロードするには、RFC1867、PUT、WebDAV の 3 つのメカニズムがあります。一般的な実装方法は、RFC1867 で導入された新しい型である File オブジェクトと ADO Stream オブジェクトを使用することです。この記事では、上記のアップロード方法と実装原則について説明し、具体的なソリューションの例を示します。
キーワード: ASP コンポーネント FILE オブジェクト
現在、ブラウザ/サーバー モデルに基づくアプリケーションの方が一般的です。ユーザーがファイルをサーバーに転送する必要がある場合、一般的な方法の 1 つは、FTP サーバーを実行し、各ユーザーの FTP デフォルト ディレクトリをユーザーの Web ホーム ディレクトリとして設定することです。これにより、ユーザーは FTP クライアント プログラムを実行してファイルを Web ホーム ディレクトリにアップロードできます。指定された Web ディレクトリ。これには、ユーザーが FTP クライアント プログラムの使用方法を知っている必要があります。したがって、このソリューションは、FTP に精通した経験豊富なユーザーのみが実行可能です。 ファイルアップロード機能をWebと連携させ、Webブラウザだけでアップロード作業を完了できるようになれば、非常に便利になります。ただし、ファイル システム オブジェクトはテキスト ファイルしか送信できないという制限があるため、ASP の最大の問題はファイルのアップロードです。ここでは、HTTP プロトコルに基づいて Web ページにファイルをアップロードする方法について説明します。
1つ。 HTTP 経由でアップロードするための 3 つのメカニズム
HTTP 経由でアップロードするには、RFC1867、PUT、および WebDAV という 3 つのメカニズムがあります。
PUT は、HTTP 1.1 で導入された新しい HTTP 動詞です。 Web サーバーが HTTP PUT とオブジェクト名を受信すると、ユーザーを認証し、HTTP ストリームのコンテンツを受信して、それを Web サーバーに直接保存します。これは Web サイトに混乱をもたらす可能性があるため、HTTP の最大の利点であるサーバーのプログラマビリティも失われます。 PUT の場合、サーバーはリクエスト自体を処理します。CGI または ASP アプリケーションが介入する余地はありません。アプリケーションが PUT をキャプチャする唯一の方法は、低レベルの ISAPI フィルタリング レイヤーで動作することです。同様の理由により、PUT の用途は非常に限定されています。
WebDAV により、Web コンテンツの分散認証と変換が可能になります。 HTTP 経由で Web コンテンツのアップロード、ロック/ロック解除、チェックイン/チェックを可能にするいくつかの新しい HTTP 動詞が導入されています。 Office 2000 の「Web に保存」は WebDAV を通じて実装されています。コンテンツをアップロードすることだけに興味がある場合、WebDAV はうまく機能し、多くの問題を解決します。 ただし、Web アプリケーション内でファイルをアップロードする必要がある場合、WebDAV は役に立ちません。 HTTP PUT と同様に、これらの WebDAV 動詞は Web アプリケーションではなくサーバーによって解釈されます。 WebDAV のこれらの動詞にアクセスし、アプリケーション内のコンテンツを解釈するには、ISAPI フィルタリング層で作業する必要があります。
RFC1867 ( http://www.ietf.org/rfc/rfc1867.txt ) は、最終的に W3C によって HTML3.2 として受け入れられる前に、標準案として使用されました。これは非常にシンプルですが強力なアイデアです。フォーム フィールドに新しい型を定義します。
<INPUT TYPE="FILE">
また、一般的な<FORM ACTION="formproc.asp" METHOD="POST">
を使用する代わりに、次の <FORM ACTION="formproc .asp" を使用して、フォーム自体に
異なるエンコード スキーム
を追加しました
。" METHOD="POST" ENCTYPE="multipart/form-data">
このエンコード スキームは、大量のデータを送信する場合、デフォルトの "application/x-url-encoded" フォーム エンコード スキームよりも効率的です。 URL エンコードには非常に限られた文字セットしかありません。文字セットを超える文字はすべて「%nn」に置き換える必要があります。nn は対応する 2 桁の 16 進数を表します。たとえば、通常のスペース文字も「%20」に置き換える必要があります。一方、RFC1867 は、電子メール メッセージで一般的に見られるマルチパート MIME エンコーディングを使用して、大量のデータをエンコーディングなしで送信しますが、データを囲む単純だが便利なヘッダーがいくつかあるだけです。主要なブラウザ メーカーは推奨の [参照...] ボタンを採用しており、ユーザーはローカルの [ファイルを開く...] ダイアログ ボックスを使用してアップロードするファイルを簡単に選択できます。
RFC1867 では、Web アプリケーションにファイルをアップロードする柔軟な方法のほとんどが依然として残されています。 PUT の用途は非常に限られています。 WebDAV は、FrontPage ユーザーなどのコンテンツ作成者にとっては便利ですが、ファイルのアップロードを Web アプリケーションに組み込みたい Web 開発者にとってはあまり役に立ちません。したがって、RFC1867 は、Web アプリケーションにファイルのアップロードを組み込む最良の方法です。
実際のアプリケーションでは、Microsoft は Posting Acceptor を無料で提供しています。 ASP は、「multipart/form-data」エンコード スキームを理解できません。代わりに、Microsoft は、アップロード完了後に ASP ページへの REPOST を受け入れる ISAPI アプリケーションである Posting Acceptor を提供しています。
Software Artisans の SA-FileUp は、最初の商用 Active Server コンポーネントの 1 つです。いくつかの改良を経て、現在は純粋な ASP コンポーネントとして存在しています。
二。 ASP ベースのファイル アップロード実装原理分析の
基本原理は、ADO Stream オブジェクトの BinaryRead メソッドを使用して FORM 内のすべてのデータを読み取り、必要なファイル データをインターセプトし、それをバイナリ ファイルとして保存することです。
ファイル アップロード ページ (upload.htm) の例を次に示します:
<html>
<本文>
<form name="Upload" Method="Post" Enctype="multipart/form-data" Action="Upload.asp">
<input type="file" name="ファイル名">
<INPUT TYPE="送信" VALUE="アップロード"></TD>
</form>
</body>
</html>
ファイル オブジェクトはプログラムで使用されるため、Upload.asp の BinaryRead メソッドを使用して読み取られる元のデータには、選択したファイル自体のデータだけでなく、ファイルのパス、種類、送信も含まれます。ユーザーのハードディスク上にあるフォームのドメイン名とページのその他の関連情報の説明。そのため、ファイルの特定のコンテンツを抽出する必要があります。解析によると、ヘッダ情報とデータの区切りは2組の復帰と改行であり、最後には区切り情報も存在することが分かりました。以下のような方法でファイルデータを取得できます。
Dim FormData.FormSize、DataStart、CLStr、DivStr
FormSize=Request.TotalBytes
FormData=Request.BinaryRead(FormSize)
CLStr=ChrB(13)&ChrB(10)
DataStart=InStrB(FormData.CLStr&CLStr)+4
'4 は、2 組のキャリッジ リターン文字とライン フィード文字の長さです。
DivStr=LeftB(FormData,InStrB(FormData,CLStr)-1)
DataSize=InStrB(DataStart+1,FormData,DivStr)-DataStart-2
FormData=MidB(FormData,DataStart,DataSize)
FormData はファイルの内容です。
必要に応じて対応する処理を実行できます。最後に行うことは、ファイルを保存することです。保存方法は 2 つあります。1 つは、VB や VC などのプログラムでバイナリ ファイルを操作する方法を使用し、適切なタイプ ライブラリをプロジェクトに追加し、最終的に DLL ファイルにコンパイルし、使用時に DLL ファイルを登録する方法です。それ。 。ファイルの保存手順は以下の通りです。
Public Function SaveFile(Pathname As String) As String
ObjectContext としての Dim objContext
リクエストとしての Dim objRequest
objContext=GetObjectContext() を設定します
set objRequest=objContext("リクエスト")
'次のコードはファイル ストレージ操作に関連しています Dim FormData() As Byte、CLStr、DivStr
薄暗いデータ開始長さ、データサイズ長さ
DataSize=objRequest.TotalBytes
Redim FormData(DataSize-1)
FormData=objRequest.BinaryRead(DataSize)
CLStr=ChrB(13) & ChrB(10)
DataStart=InStrB(FormData,CLStr & CLStr)+4
DivStr=LeftB(FormData,InStrB(FormData,CLStr)-1)
DataSize=InStrB(DataStart+1,FormData,DivStr)-DataStart-2
FormData=MidB(FormData,DataStart,DataSize)
'バイナリ ファイルを作成し、そこに FormData を書き込みます。バイナリのパス名を 1 として開きます。
#1,,FormData を入力します
閉じる #1
ファイル保存 = "OK!"
End Function の
、ADO STREAM で提供されるバイナリ ファイル操作メソッドを使用することです。ファイルを保存するステートメントは StreamOBJ.SaveToFile (fileName,2) です。この種の操作では、関連する操作をクラス ファイルに保存し、それを適用するときに、クラス ファイルを ASP プログラムに直接組み込むだけで済みます。具体的な処理方法については、関連する紹介文を参照してください。
三つ。ファイル アップロード実装メソッド インスタンスは、
コンポーネントまたはコンポーネントレス メソッドを使用してファイル アップロードを実装できます。たとえば、コンポーネント カテゴリの場合、Microsoft Posting Acceptor (略して MPA) は、Microsoft によってリリースされた無料のサーバー コンポーネントです。このタイプのコンポーネントのインストールも比較的便利です。 Microsoft の mpa の場合は、インストール ファイルを実行するだけです。一般的な DLL コンポーネントの場合は、それらを登録する必要があります。たとえば、aspcnUP.dll を使用するには、Windows 2000 で regsvr32 [path]aspcnUP.dll を実行するだけで済みます。登録が成功したことを示すメッセージが表示され、コンポーネントをコンポーネントのないクラスに使用できます。 www.5xsoft.comのコンポーネントアップロード class-upload_5xsoft など。これを使用する場合は、ハンドラーに次のステートメントを含めるだけです:
<!--#include FILE="upload.inc"-->
アップロードオブジェクトの作成
に関するプロパティや操作方法については
、本コンポーネントのユーザーマニュアルを参照してください。以下は、aspcnUP.dll コンポーネントを例として、いくつかの種類のファイル (upload.asp) をアップロードするためのソース コードです。
<% @ language="vbscript"
fileUP=Server.CreateObject("aspcn.Upload") を設定します
ファイルUP.Maxsize=200000
fileUP.Path="d:upfile"
ファイルUP.アップロード
i=0 の場合、fileUP.Count まで
フィールド名=ファイルUP.フィールド名(i)
fileUP.FileType(フィールド名)="zip" または ileUP.FileType(フィールド名)="rar" の場合
ファイルUP.フィールド名を保存
終了の場合
次
fileUP=Nothing を設定します
%>
4。結論
Microsoft が新たに開始した ASP では、ブラウザ/サーバー アプリケーション モデルが依然として急速に発展しています。 NET にはファイルアップロード機能が組み込まれており、非常に簡単で便利です。まったく新しいテクノロジーとして、ASP。 NET は単なる ASP のアップグレードではなく、多くの新機能を備えた Web 開発用のまったく新しいフレームワークです。 ASP. NET は、より書きやすく、より明確な構造を持つコードを提供します。これらのコードを使用すると、コードの再利用や共有が容易になり、より実用的なプログラムを開発できます。