<system.web> <httpModules> <add name="IGUploadModule" type="Infragistics.Web.UI.EditorControls.UploadModule" /> </httpModules> </system.web>
WebUpload コントロールは、クライアント側限定の jQuery Upload のための ASP.NET ラッパーです。クライアント コントロールにあるリッチな API がこのコントロールにあるのはこのためです。このトピックは、サーバー側のメイン クラスについての詳細およびサーバー イベントについての情報を公開します。
HttpModule は、ファイルのアップロード処理を管理するように構成できます。これは HTTP 要求プロセスにプラグインするように .NET IHttpModule インターフェイスを実装します。.したがって、すべての要求は、アップロード コントロールからではない要求であっても、HttpModule を通過します。HttpModule がアップロード コントロールだけに関連する要求をフィルター処理するのはこのためです。
以下の例は、IIS6 (つまり開発サーバー)用または IIS7 サーバーの配備用に * HttpModule* を構成する方法を示します。
HttpHandler** は .NET IHttpHandler インターフェイスを実装し、クライアント ウィジェットと通信するために使用されます。このハンドラーには 2 つの主要機能があります。クライアントからコマンドを受け取ることとクライアントに状態を返すことです。
アップロード コントロールとハンドラー間のすべての要求は、Ajax を介して送信されます。Ajax を通信メカニズムとして使用することは、JSON でステータス メッセージをハンドラーが返す場合の当然の選択肢です。
HttpModule と比較すると、HttpHandler は URL からアクセスできます。送信されるすべてのファイルのコマンドは、URL でパラメーターとなります。コマンドは、以下の 3 タイプのいずれかにすることができます:
Status: 現在のファイルの状態を返します。JSON 応答には、合計バイト、アップロードされたバイト、および現在のファイル エラー状態の情報を含みます。JSON フォーマットは以下のとおりです:
Cancel: このコマンドが要求されると、ファイルのアップロード処理がキャンセルされます。
fileSize: このコマンドは 2 つの特別なケースで呼び出されます。コントロールで表示するためにアップロードされるファイルのサイズがハンドラーから必要とされる場合です。最初のケースは、* autostartupload* プロパティが false に設定されている場合です。ユーザーがアップロードを開始するまでファイルが処理されないため、サイズの情報が必要とされます。もうひとつのケースは、autostartupload プロパティが true に設定されているが、ファイルはアップロードのキューに置かれているために、アップロード処理が未だ開始されていない場合です。
このハンドラーを有効にするには、Web.config ファイル(開発サーバー用または IIS7 用)に適切なセクションを追加する必要があります。
注: この例は、IGUploadStatusHandler.ashx をハンドラーのデフォルト名として使用します。名前とハンドラーへのパスは、唯一推奨される値です。
UploadProgressManager と呼ばれるプロキシ クラスを使用してハンドラーとモジュールが通信するように設計されたサーバー アーキテクチャです。このクラスはサーバー イベントのトリガーも実行します。このイベントは、ファイルをアップロード プロセスを処理して、アップロードしたファイルの削除や移動などのアクションを実行したり、アップロードをキャンセルしたり、状態の情報を変更できる場所です。
3 つのサーバー イベントにはすべて 2 つの引数があります。ひとつは sender で、もうひとつはイベント引数です。sender は、イベントを発生させる UploadProgressManager を含んでいます。イベント引数は以下の 3 つのイベントごとに固有で、各イベント引数は IUploadEventArgs インターフェイスを実装します。
以下にリストするコードは、サーバー イベントに添付する方法を示します。以下の各イベントは、個々のハンドラーを実装します。
最初に、ASP.NET ラッパー、Infragistics.Web.jQuery.dll を含むアセンブリ ファイルを追加し、次に WebUpload のプレフィックスを登録します。
これで、WebUpload を ASPX ページに追加し、コントロールのイベントのハンドラーを添付できます。
FileStarting: ファイルのアップロードが開始すると、要求ヘッダーからのすべての情報は、タイプ UploadingStartEventArgs のイベント引数で使用可能となります。この時点でこの情報が使用可能であるということは、イベント ハンドラーで、入力規則を実装したり、アップロードをキャンセルするかどうかを決定できるという意味です。イベント引数のもうひとつの重要なプロパティは TemporaryFileName です。これは、アップロード中のファイル名になります。FileStarting 内に限って、クライアントに送信できる serverMessage プロパティを設定できます。
FileFinishing : この段階では、ファイルはすでにアップロードされていますが、一時的な名前のままです。WebUpload はファイルをリリースしているので、自由に変更できます。
FileFinished : この段階では、ファイルはアップロードされており、オリジナルの名前で変更されています。古いファイル名と同じ名前のファイルがある場合は上書きされ、最後のファイルだけが使用可能になります。
以下のコードは、FileFinishing イベントの処理方法と、一連の手順のこの段階では一時的な名前が付けられている、アップロードされたファイルの削除方法を示します。
アップロード情報がサーバーからクライアントに転送される場合、現在のアップロードの状態データが含まれます。応答データには以下が含まれます:
アップロードしたバイト
ファイル状態の情報
発生する可能性がある例外についてのエラー情報
表 1 はアップロード状態の応答の詳細を説明し、表 2 はファイルのエラー コードを説明します。
説明されたデータを含む JSON 応答の例は、図 2 で説明します。
注: 他の JSON プロパティである size、serverMessage、および bytesUploaded は、エラーや状態のようにサーバーの列挙体タイプとして作成される必要はありません。これらは動的に変更される文字列または数値であるからです。
表 1: タイプ UploadStatus の列挙体
表 2: タイプ FileError の列挙体