バージョン

ファイルをストリームとして保存 (igUpload)

トピックの概要

目的

このトピックは、アップロード ファイルをファイルまたはメモリストリームとして処理し、保存する方法を説明します。詳細な手順は、各プロセスでメモリストリームとしてファイルを保存トピックをご参照ください。

前提条件

このトピックを理解するために、以下のトピックを参照することをお勧めします。

  • igUpload の概要: このトピックは igUpload コントロールおよびその機能について紹介します。このトピックでは、このコントロールを HTML ページへ追加する方法を示します。

  • igUpload の構成: このトピックは、igUpload コントロールの構成方法をコード例を用いて説明します。

  • HTTP ハンドラーおよびモジュールの使用 (igUpload): このトピックは、HTTP モジュールおよび HTTP ハンドラーを構成して、igUpload コントロールでアップロードされるデータを承諾するのに必要なサーバー イベントを処理する方法をデモします。

  • クライアント側イベントの使用 (igUpload): このトピックは、igUpload コントロールにより起動されたクライアント側イベントの処理方法を説明します。

このトピックの内容

このトピックは、以下のセクションで構成されます。

ファイルをストリームとして保存 - 概要

ストリームの概要としてファイルを保存

ファイルをアップロードする際に、通常サーバーで処理します。たとえば、ファイル システムに保存する前にデータベースに保存または圧縮します。

ファイルのアップロード処理を有効にするには、Ignite UI for MVC Upload の HTTP モジュールを有効にする必要があります。このモジュールを有効にするには、プロジェクトの web.config ファイルに登録してください。正確な構成は、インストール済みのインターネット インフォメーション サービス (IIS) バージョンにより異なります。

ファイルをアップロードして正しく処理するには、igUpload コントロールは、ファイル サイズやアップロード状態および進行状況などファイルやアップロード処理に関するデータの一部が必要です。このデータ交換を可能にするには、Ignite UI for MVC Upload の HTTP モジュールを有効にする必要があります。このハンドラーを有効にするには、プロジェクトの web.config ファイルに登録してください。正確な構成は、インストール済みのインターネット インフォメーション サービス (IIS) バージョンにより異なります。

igUpload コントロールは、明示的に定義されたアプリケーション設定なしで機能できます。ただし、以下のようなものを常に構成するには実施するとよいです。

  • 一時ファイルを保存するフォルダー

そのようなフォルダーが構成されないと、ファイルは <project folder>/Uploads であるデフォルト位置にストアされます。

  • ファイル サイズの制限

アップロード ファイルの最大サイズは maxFileSizeLimit プロパティで設定します。デフォルト値は 4 Mb です。

  • ファイル保存モード

ファイル保存モードは、ファイルの処理方法 (ファイル ストリームまたはメモリ ストリーム) を指定します。(詳細については、ファイル処理の概要を参照してください)。ファイル保存モードは、FileSaveType プロパティにより管理されます。許可される値は、ファイル処理のそれぞれのマナーに対応する filestreammemorystream です。デフォルト値はファイルストリームです。

View では、igUpload のクライアント側エラー処理と同様に、igLoader コンポーネントおよび igUpload を構成する必要があります。

コントローラーでは、各ファイルのデータ群を処理するメソッドを実装する必要があります。

手順

以下は、ファイルをストリームとして保存するための概念的なステップです。

  1. igUpload の HTTP モジュールを構成する
  2. igUpload の HTTP ハンドラーを構成する
  3. (オプション) igUpload のアプリケーション設定を構成する
  4. ファイル キャッシュ機能の実装
  5. View で igUpload を構成する
  6. コントローラーでの igUpload を構成する
  7. igUpload サーバー側イベントを登録する

ファイル処理の概要

ファイル処理の要約

Ignite UI for MVC Upload は、アップロード中またはサーバー上の一時ファイルに保存された後にオンデマンドでファイルが処理されるかどうかに応じて、アップロード ファイルを処理する以下の方法を提供します。

  • ファイル ストリームの処理 - アップロードされたファイルは、まず Ignite UI for MVC Upload の HTTP モジュールにより一時ファイルとして保存されます。ファイルの保存後にファイルを処理できます。このモードはファイルをサーバー ファイル システムに保存する場合に使用します。
  • メモリ ストリーム処理 - アップロードしたファイルは、アップロード時 (その後保存) またはメモリにアップロードした後のいずれかのオンデマンドで処理されます。アップロード処理により細やかなコントロールが必要である場合にこのモードを使用します (たとえばデスクやデータベースに保存する前に圧縮する場合など)。

ファイル ストリーム処理

ファイル ストリーム モードは、一時的な場所にファイルをアップロード (fileUploadPath アプリケーション設定によって示します) し、処理を選択するまで保持されます。アップロードされるファイルを処理するために、UploadFinishing イベントを処理する必要があります。UploadFinishing イベントには FilesStream タイプのパラメーターがあり、アップロードしたファイルにアクセスできます。このパラメーターを使用すると、ファイルを他の場所へ移動できます。ファイルを手動で処理する場合、UploadFinishingEventArgs.Cancel プロパティを true に設定する必要があります。このやり方で、一時ファイル (存在する場合) は igUpload により削除されます。

UploadFinishing イベントが処理されない場合、一時ファイルは元のファイルに名前変更され、既存のファイルを同じ名前で上書きし一時フォルダーに置かれたままになります。

メモリ ストリーム処理

メモリ ストリーム処理を使用する場合、ファイルは手動で処理できる MemoryStream オブジェクトにアップロードされます。Ignite UI for MVC Upload コンポーネントは、MemoryStream にアップロードするために以下のアプローチを提供します (処理するイベントやそれらのイベントの処理方法に基づく)。

  • (推奨) 各グループを処理します。

    ファイルを手動で処理するには、FileUploading イベントを処理する必要があります。FileUploading の FileUploadingEventArgs パラメーターにタイプ バイト配列の FileChunk プロパティが必要です。(このプロパティは、現在の/最後のデータのアップロードされたデータ群を保存します。) FileUploading はキャンセル可能なイベントであり、ファイルの一部が処理されているかどうかにかかわらず、Upload の HTTP モジュールにフィードバックを返すために使用できます。イベントをキャンセルすることを選択するかどうかは、ファイル群を自動で処理するか手動で処理するかによります。

FileUploading イベントをキャンセルしない場合、ファイルの一部は MemoryStream オブジェクトに追加し、UploadFinishing イベント (UploadFinishingEventArgs.FileStream) で利用可能になります。

FileUploading イベントを処理するには、UploadProgressManager クラスの AddFileUploadingEventHandler メソッドを使用します。UploadProgressManager は、シングルトン クラス インスタンスで、Instance プロパティからアクセスできます。

  • 一度にすべてのファイルを処理できます。

これは UploadFinishing イベントを処理して達成できます。UploadFinishingUploadFinishingEventArgs パラメーターには、FileStream プロパティがあり、MemoryStream オブジェクトとしてアップロード ファイルを保持します。このプロパティ (UploadFinishingEventArgs.FileStream) を使用してファイル データを処理します。このアプローチでは、ファイルが完全にサーバーにアップロードされるまでメモリ内にファイル データが保持されてしまいます。

アップロード済みの各ファイルの一部を処理してメモリ ストリームとしてファイルを保存

概要

この例では、FileUploading イベントを処理し各ファイルの一部を個別に処理することにより、メモリ ストリーム処理を使用して igUpload を構成します。アップロードされたファイルの一部は、ASP.NET キャッシュ バッファーに追加されます。バッファーが特定のしきい値に達するとディスク上のファイルに書き込みます。この方法により、RAM の igUpload 使用を最適化でき、より多くのファイルを同時にアップロードできます。

この例は、ファイル キャッシュ機能を実装するためにカスタム クラスを作成します。UploadUtils は静的なクラスで、現在アップロードしているファイルをキャッシュのMemoryStream ディクショナリで処理します。また、ファイルをこのディレクトリに書き込むために、igUploadfileUploadPath アプリケーション設定を使用します。

更に、一時ファイルを保存するフォルダーが作成され、アップロード ファイルの最大サイズが 100 Mb に設定されます。

要件

以下は、各アップロード済みファイルの一部を個別に処理してファイルをメモリ ストリームとして保存するための一般的な要件です。

  • Microsoft® Visual Studio 2010 またははそれ以降
  • ASP.NET MVC 2 またはそれ以降
  • Infragistics Ignite UI for jQuery® 13.1 またはそれ以降

前提条件

  • インターネット アプリケーション テンプレートに基づいて「igUploadMemoryStreamExample」と呼ばれる C# ASP.NET MVC 3 Web アプリケーションの Microsoft Visual Studio プロジェクト
  • プロジェクトに追加される Infragistics.Web.Mvc.dll ファイルへの参照
  • <project folder>/Views/Shared/_Layout.cshtml ファイルへ追加された以下のスクリプト
    • <project folder>/Scripts/jquery-1.5.1.min.js
    • <project folder>/Scripts/jquery-ui-1.8.11.min.js
  • プロジェクトに含まれ適切に参照された Infragistics Ignite UI for jQuery エージェント

    • スクリプトは、<project folder>\Infragistics フォルダーに置かれます。
    • <project folder>/Views/Shared/_Layout.cshtml ファイル (ファイルはプロジェクトの一部として使用可能) のヘッド タグで参照しなければなりません。

      HTML の場合:

      <script src="@Url.Content("~/Scripts/jquery-1.5.1.min.js")" type="text/javascript"></script>
      <script src="@Url.Content("~/Scripts/jquery-ui-1.8.11.min.js")" type="text/javascript"></script>
      
  • 一時ファイルがアップロードされる <project folder>\Uploads フォルダー

  • Global.asax ファイルで無視される IGUploadStatusHandler.ashx へのルート

RegisterRoutes メソッドの先頭に RegisterRoutes オプションを設定します。

C# の場合:

routes.IgnoreRoute("IGUploadStatusHandler.ashx");

概要

以下はプロセスの概念的概要です。

  1. Upload の HTTP モジュールを構成する
  2. Upload の HTTP ハンドラーを構成する
  3. (オプション) Upload のアプリケーション設定を構成する
  4. ファイル キャッシュ機能の実装
  5. View で Upload を構成する
  6. コントローラーでの Upload を構成する
  7. Upload サーバー側イベントを登録する
  8. (オプション) 結果の検証

手順

以下は、ファイルをメモリ ストリームとしてアップロードする方法の手順です。

  1. Ignite UI for MVC Upload の HTTP モジュールを構成します。

    プロジェクトの web.config ファイルで登録することにより HTTP モジュールを有効にします。

    • Internet Information Services (IIS) 6 の構成

      IIS 6 を構成するには、<system.web> セクションにおいて、web.config ファイルの <httpModules> セクションで、Ignite UI for MVC Upload の HTTP モジュールを登録します。

      XML の場合:

      <system.web>
      <httpModules>
          <add name="IGUploadModule" type="Infragistics.Web.Mvc.UploadModule" />
      </httpModules>
      </system.web>
      
    • IIS 7 の構成

      IIS 7 を構成するには、<system.webServer> セクションにおいて、web.config ファイルの <modules> セクションで、Ignite UI for MVC Uploadの HTTP モジュールを登録します。

      XML の場合:

      <system.webServer>
      <modules runAllManagedModulesForAllRequests="true">
          <add name="IGUploadModule" type="Infragistics.Web.Mvc.UploadModule" 
                                     preCondition="managedHandler" />
      </modules>
      </system.webServer>
      
  2. Ignite UI for MVC Uploadの HTTP ハンドラーを構成します。

    プロジェクトの web.config ファイルで登録することにより HTTP モジュールを有効にします。

    • IIS 6 の構成

      IIS 6 を構成するには、<system.web> セクションにおいて、web.config ファイルの <httpHandlers> セクションで、Ignite UI for MVC Uploadの HTTP ハンドラーを登録します。

      XML の場合:

      <system.web>
      <httpHandlers>
           <add verb="GET" type="Infragistics.Web.Mvc.UploadStatusHandler" 
                           path="IGUploadStatusHandler.ashx" />
      </httpHandlers>
      </system.web>
      
    • IIS 7 の構成

      IIS 7 を構成するには、<system.webServer> セクションにおいて、web.config ファイルの <handlers> セクションで、Ignite UI for MVC Uploadの HTTP ハンドラーを登録します。

      XML の場合:

      <system.webServer>
      <handlers>
          <add name="IGUploadStatusHandler" path="IGUploadStatusHandler.ashx" verb="*"
               type="Infragistics.Web.Mvc.UploadStatusHandler" preCondition="integratedMode" />
      </handlers>
      </system.webServer>
      
  3. Ignite UI for MVC Uploadのアプリケーション設定を構成します。

    アプリケーション設定を構成します。

    1. (オプション) 一時ファイル フォルダーを構成します。

      以下のコードは、一時ファイルを保存するために Uploads フォルダーを構成します。

      XML の場合:

       <appSettings>
           <add key="fileUploadPath" value="~/Uploads" />
       </appSettings>
      
    2. (オプション) ファイル サイズ制限を構成します。

      以下のコード セットは、アップロードするファイルの最大サイズを 100 Mb に設定します。

      XML の場合:

       <appSettings>
           <!--100 Mb = 2097152 bytes-->
           <add key="maxFileSizeLimit" value="104857600" />
       </appSettings>
      
    3. ファイル保存モードを構成します。

      以下のコードは、ファイル保存モードを memorystream に設定します。

      XML の場合:

       <appSettings>
           <add key="FileSaveType" value="memorystream"/>
       </appSettings>
      
  4. ファイル キャッシュ機能を実装します。

    キャッシュ機能を実装する

    1. バッファー サイズを構成します。

      A. web.config ファイルを開きます。

      B. バッファー サイズ アプリケーション設定を追加します。

      この例では、uploadUtilsBufferSize アプリケーション設定でディスクにファイル データを書き込む前にバッファリングする際のしきい値を構成します。この構成を使用して ASP.NET キャッシュで独自のファイル バッファリングを実装します。以下のコードは 2 Mb に設定します。

      XML の場合:

       <appSettings>
           <!--2 Mb = 2097152 bytes-->
           <add key="uploadUtilsBufferSize" value="2097152" />
       </appSettings>
      
    2. UploadUtils.cs ファイルをプロジェクトに追加します。

      A. プロジェクトを右クリックします。

      B. コンテキスト メニューから追加 、次にクラスを選択します。新しい項目を追加ダイアログが開きます。

      C. 新しい項目を追加ダイアログの名前フィールドで UploadUtils.cs を入力します。

      D. 追加を押します。ファイルがプロジェクトに追加されます。

    3. UploadUtils クラスを実装します。

      A. UploadUtils.cs ファイルを開きます。手順のすべてのコードがこのファイルに書き込まれます。

      B. クラスを静的にします。

      static を UploadUtils クラス定義に追加します。

      C# の場合:

       public static class UploadUtils
       {
           // Class definition here see steps 2 to 7
       }
      

      C. using 句を追加します。

      using 句は、ConfigurationManager および Path クラスに必要です。以下のコードは、最初の using 句は ConfigurationManager クラス用で 2 つ目の using 句は Path クラス用です。

      C# の場合:

       using System.Configuration;
       using System.IO;
      

      D. 定数の定義

      uploadUtilsBufferSize および fileUploadPath の設定のためのアプリケーション定義が web.config ファイルに含まれない場合、定数が必要です。

      C# の場合:

       //4 Mb default buffer size
       private const int DEFAULT_BUFFER_SIZE = 4 * 1024 * 1024; 
       private const string DEFAULT_UPLOAD_PATH = "~/Uploads";
      

      E. バッファー サイズの構成

      静的 BufferSize プロパティを定義します。このプロパティは、uploadUtilsBufferSize アプリケーション設定を返します。

      C# の場合:

       public static int BufferSize
       {
           get
           {
               int bufferSize;
               if (Int32.TryParse(ConfigurationManager.AppSettings ["uploadUtilsBufferSize"], out bufferSize))
               {
                   return bufferSize;
               }
               return DEFAULT_BUFFER_SIZE;
           }
       }
      

      F. アップロードパス を構成します。以下のコードを追加して、静的 UploadPath プロパティを定義します。このプロパティは、fileUploadPath アプリケーション設定を返します。

      C# の場合:

       public static string UploadPath
       {
           get
           {
               string path = DEFAULT_UPLOAD_PATH;
               if (ConfigurationManager.AppSettings["fileUploadPath"] != null)
               {
                   path = ConfigurationManager.AppSettings["fileUploadPath"];
               }
               if (path.StartsWith("~"))
               {
                   path = HttpContext.Current.Server.MapPath(path);
               }
               if (!path.EndsWith(Path.DirectorySeparatorChar.ToString()))
                   path += Path.DirectorySeparatorChar;
               if (!Directory.Exists(path))
                   throw new DirectoryNotFoundException(path);
               return path;
           }
       }
      

      G. メソッドを構成して キャッシュからストリームを取得します。

      GetStreamFromCache 静的メソッドを定義します。この静的メソッドは、指定したキーで MemoryStream を返します。これを行うには、Dictionary<string, MemoryStream> オブジェクトを ASP.NET キャッシュに管理します。ディクショナリは、現在アップロードしているファイルのデータを保留します。「コントローラーで Ignite UI for MVC Uploadを構成する」セクションを参照すると、ファイル全体をキャッシュに保持しなくてもよくなります。代わりに、UploadUtils.BufferSize プロパティでサイズが定義されたデータ群をディスクのファイルに書き込みます。

      C# の場合:

       public static MemoryStream GetStreamFromCache(string key)
       {
           Dictionary<string, MemoryStream> uploadingFiles = HttpContext.Current.Cache["UploadingFiles"] as Dictionary<string, MemoryStream>;
           MemoryStream stream;
           if (uploadingFiles == null)
           {
               uploadingFiles = new Dictionary<string, MemoryStream>();
               HttpContext.Current.Cache["UploadingFiles"] = uploadingFiles;
           }
           if (!uploadingFiles.ContainsKey(key))
           {
               stream = new MemoryStream();
               uploadingFiles.Add(key, stream);
           }
           else
           {
               stream = uploadingFiles[key];
           }
           return stream;
       }
      

      H. メソッドを構成して キャッシュからストリームを削除します。

      RemoveStreamFromCache 静的メソッドを定義します。このメソッドは、キーによりディクショナリから項目フォームを削除します。「コントローラーで Ignite UI for MVC Uploadを構成する」セクションを参照し、現在アップロードしているファイルのキャッシュからファイルを削除するために使用します。

      C# の場合:

       public static void RemoveStreamFromCache(string key)
       {
           Dictionary<string, MemoryStream> uploadingFiles = HttpContext.Current.Cache["UploadingFiles"] as Dictionary<string, MemoryStream>;
           if (uploadingFiles != null && uploadingFiles.ContainsKey(key))
           {
               uploadingFiles.Remove(key);
           }
       }
      

      I. ファイルにストリームを書き込む メソッドを構成します。

      AppendStreamToFile 静的メソッドを定義します。この静的メソッドは、MemoryStream オブジェクトをファイルに書き込みます。メソッドは、ファイル名と MemoryStream 値をパラメーターとして受け付けます。

      C# の場合:

       public static void AppendStreamToFile(string fileName, MemoryStream stream)
       {
           using (FileStream fs = new FileStream(fileName, FileMode.Append))
           {
               stream.WriteTo(fs);
           }
       }
      
  5. View で Ignite UI for MVC Uploadを構成します。

    <project folder>\Views\Home\Index.cshtml ファイルで、コードを入力して View を構成します。

    Infragistics.Web.Mvc 名前空間を最初に含めます。

    次は、infragistics.loader.js ファイルへの参照と igUpload onError クライアント側イベントのハンドラーです。この OnError クライアント側ハンドラーは、<div> 要素に対するエラーを uploadErrors に等しい ID で追加します。<div> 要素は、コード スニペットの末尾で定義されます。

    onError イベントは、サーバー側とクライアント側の 2 つのタイプのイベントを処理します。ui.errorType プロパティで区別できます。

    ui.errorType == “serverside” の場合、エラーはサーバー上の開発者コードから来ます。メッセージは ui.serverMessage に保持されます。

    ui.errorType == “clientside” の場合、エラーはクライアント側にあります。メッセージは ui.errorMessage に保持されます。詳細については、「クライアント側イベントの使用」トピックを参照してください。

    onError ハンドラーが構成された後、igLoader が定義されます。igLoader コンポーネントは、igGrid により使用されるリソースをロードする責任があります。

    最終的に、igUpload.ID は明示的に定義されます。これにより、クライアント側イベントで正しいコントロールにサブスクライブできます。ControlID メソッドは、サーバー上で識別しそのサーバー側イベントにサブスクライブできるコントロールの識別子を追加します。

    C# の場合:

     @using Infragistics.Web.Mvc
     <script src=@Url.Content("~/Infragistics/js/infragistics.loader.js") type="text/javascript"></script>
     <script type="text/javascript">
         $(document).delegate("#upload1", "iguploadonerror", function (evt, ui) {
             if (ui.errorType === "serverside")
                 $("#uploadErrors").append("<p>" + ui.serverMessage + "</p>");
             else
                 $("#uploadErrors").append("<p>" + ui.errorMessage + "</p>");
         });
     </script>
     @(Html.Infragistics().Loader()
         .CssPath(Url.Content("~/Infragistics/css/"))
         .ScriptPath(Url.Content("~/Infragistics/js/"))
         .Render())
     @(
     Html.Infragistics().Upload()
         .ID("upload1")
         .ControlId("upload1")
         .AutoStartUpload(false)
         .Mode(UploadMode.Multiple)
         .ProgressUrl("/IGUploadStatusHandler.ashx")
         .Render()
     )
     <div id="uploadErrors" style="color: red;"></div>
    
  6. コントローラーで Ignite UI for MVC Uploadを構成します。

    コントローラーを構成するには

    1. <project folder>\Controllers\HomeController.cs ファイルを開きます。手順のすべてのコードがこのファイルに書き込まれます。

    2. 既存の HomeController クラス メソッドを削除します。

    3. igUpload コントロールのサーバー側イベントを処理するメソッドを定義します。

      A. using 句を追加します。以下の using 句を追加します。

      C# の場合:

       using Infragistics.Web.Mvc;
       using System.IO;
      

      UploadStatus 列挙体および MemoryStream クラスで使用されます。

      B. Index メソッドを追加します。

      インデックス アクション メソッドは、名前が同じ View を返します。

      C. igUpload の FileUploading イベントのハンドラーを追加します。

      igUpload_FileUploading メソッドを <project folder>\Controllers\HomeController.cs ファイルに追加します。

      C# の場合:

       internal static void igUpload_FileUploading(object sender, FileUploadingEventArgs e)
       {
           MemoryStream stream = UploadUtils.GetStreamFromCache(e.TemporaryFileName);
           stream.Write(e.FileChunk, 0, e.FileChunk.Length);
           if (stream.Length >= UploadUtils.BufferSize)
           {
               string fileName = UploadUtils.UploadPath + e.TemporaryFileName;
               stream.Flush();
               UploadUtils.AppendStreamToFile(fileName, stream);
               stream.Close();
               UploadUtils.RemoveStreamFromCache(e.TemporaryFileName);
           }
           e.Cancel = true;
       }
      

      いくつかのファイルが同時にアップロードできるということは、このイベントはファイルに対して非同期に発生することができるという意味であり非常に重要です。データがどのファイルに送信されるのかを見極める方法が必要となる理由がここにあります。1 つの可能性のあるアプローチは、ファイルの名前が一意であることを保証する FileUploadingEventArgs.TemporaryFileName プロパティを調べることです。FileUploading ハンドラーーでは、TemporaryFileName はキーとして使用し、 UploadUtils.GetStreamFromCache 静的メソッドを使用することによりファイル データをキャッシュに書き込みます。

      FileUploading ハンドラーは、ストリーム長が UploadUtils.BufferSize しきい値を超える場合、ファイル データをファイルに書き込みます。これにより、コンピュータ RAM がフルに使用されるようになります。

      D. igUpload_FinishingUpload メソッドを使用します。

      igUpload_FinishingUpload メソッドを <project folder>\Controllers\HomeController.cs ファイルに追加します。FinishingUpload ハンドラーは、キャッシュに残っている最後のファイルの一部に書き込み、ファイルを元の名前に戻します。同じディレクトリに既存のファイルがある場合、削除されて新しいファイルが書き込まれます。

      警告: FinishingUpload ハンドラーは、名前が同じファイルを上書きします。実環境のシナリオでは、ファイルは上書することにはならないため、ユーザー名またはそのほかの識別子を採用してファルが互いに上書きされないようにしますが、当然、実装しているビジネス上のシナリオによります。

      C# の場合:

       internal static void igUpload_FinishingUpload(object sender, UploadFinishingEventArgs e)
       {
           string uploadFilePath = UploadUtils.UploadPath;
           string fileName = UploadUtils.UploadPath + e.TemporaryFileName;
           MemoryStream stream = UploadUtils.GetStreamFromCache(e.TemporaryFileName);
           UploadUtils.AppendStreamToFile(fileName, stream);
           stream.Close();
           UploadUtils.RemoveStreamFromCache(e.TemporaryFileName);
           string newFileName = UploadUtils.UploadPath + e.FileName;
           if (System.IO.File.Exists(newFileName))
               System.IO.File.Delete(newFileName);
           System.IO.File.Move(fileName, newFileName);
       }
      

      E. igUpload_FinishedUpload メソッドを追加します。

      igUpload_FinishedUpload メソッドを <project folder>\Controllers\HomeController.cs ファイルに追加します。FinishedUpload 実装は、ユーザーがアップロードをキャンセルする状況を処理します。ファイル データを保存する一時ファイルを削除します。

      C# の場合:

       internal static void igUpload_FinishedUpload(object sender, UploadFinishedEventArgs e)
       {
           switch (e.FileStatus)
           {
               case UploadStatus.CancelledByClientCommand:
               case UploadStatus.CancelledByClientConnection:
                   // delete the file if the upload was unsuccessful
                   System.IO.File.Delete(e.TemporaryFileName);
                   break;
           }
       }
      
  7. igUpload の サーバー側イベントを登録します。

    igUpload コンポーネントのサーバー側イベント ハンドラーの登録が必要なのは 1 度のみであるため、Global.asax ファイルの Application_Start メソッドで実行するのが適切です。

    1. Global.asax ファイルを開きます。

    2. using 句を追加します。UploadProgressManager クラスに using 句を追加します。

      C# の場合:

       using Infragistics.Web.Mvc;
      
    3. Application_Start メソッドを修正します。

      以下のコードは、ControlID が upload1 であるコントロールの FileUploading、FinishingUpload および FinishedUpload イベントにサブスクライブします。この操作は、UploadProgressManager クラスの AddFileUploadingEventHandler、AddFinishingUploadEventHandler および AddFinishingUploadEventHandler メソッドを使用することにより実施します。コードは Application_Start メソッドに追加されます。

      C# の場合:

       UploadProgressManager.Instance.AddFileUploadingEventHandler("upload1",
           new EventHandler<FileUploadingEventArgs>(Controllers.HomeController.igUpload_FileUploading));
       UploadProgressManager.Instance.AddFinishingUploadEventHandler("upload1",
           new EventHandler<UploadFinishingEventArgs>(Controllers.HomeController.igUpload_FinishingUpload));
       UploadProgressManager.Instance.AddFinishedUploadEventHandler("upload1",
           new EventHandler<UploadFinishedEventArgs>(Controllers.HomeController.igUpload_FinishedUpload));
      
  8. (オプション) 結果を確認します。

    結果を確認するには、プロジェクトをビルドして実行します。ファイルをアップロードしてアップロード ファイルの一時フォルダーを確認します。

オンラインで表示: GitHub