ファイル・アップロードの構成

Web UI フレームワークでファイルをアップロードするためのフィールドを作成するには、ファイル・アップロード・ウィジェットを使用します。これは、Ext JS の textfield コントロールの拡張機能です。

以下のグラフィックに、Ext JS を使用して作成されたファイル・アップロード・コントロールの例 (Attach Photo コントロール) を示します。 Web ブラウザーでは、入力フィールドがファイルとして使用されます。 以下のグラフィックに、「参照」ボタンを含むテキスト・フィールドを示します。 「参照」をクリックすると、ファイル選択ダイアログ・ボックスが開きます。 ダイアログ・ボックスはオペレーティング・システムに固有であり、カスタマイズできません。

ファイルのアップロード

また、ファイル・アップロードを構成するには、yfs.properties で以下のプロパティーを調整する必要があります。

  • sc.file.upload.maxfilesize プロパティーおよび sc.file.upload.maxfilesize.table_name プロパティーは、アップロード可能なファイルのサイズを指定するために使用します。

    sc.file.upload.allowedfiletypes プロパティーおよび sc.file.upload.allowedfiletypes.table_name プロパティーは、アップロード可能なファイルのタイプを指定するために使用します。

  • sc.file.upload.dir プロパティーは、アップロードされたファイルを一時的に保持するディレクトリーを指定するために使用します。
  • sc.file.upload.type プロパティーは、ファイルをサーバーにアップロードする時期を決定するために使用します。
Web UI フレームワークでは、Struts フィルターと Struts クリーンアップ・フィルターの < url-pattern> のフィルター・マッピングを * から *.do に変更して、アップロード・サーブレット要求が Struts フィルターを通過しないようにする必要があります。 URL パターンが変更されない場合、ファイル・アップロード要求がアップロード・サーブレットをヒットする前に解析されます。その場合、ファイルは失われます。 次のコードは、このフィルター・マッピングのセットアップ方法を示しています。
{{{
   <filter-mapping>
          <filter-name>struts</filter-name>
          <url-pattern>*.do</url-pattern>
   </filter-mapping>
   <filter-mapping>
          <filter-name>struts-cleanup</filter-name>
          <url-pattern>*.do</url-pattern>
   </filter-mapping>
}}}
WUF ファイル・アップロードでは、以下のことが起こります。
  • ファイル・タイプの検証が実行されます。 また、名前およびファイル・タイプの検証がサーバー・サイドでも行われます。 サイズの検証は、ブラウザーでは行えません。
  • ファイルは、 yfs.properties ファイル ({sc.file.upload.dir}/{App_Server_Name}/{userID of the user uploading the files}/{session ID of the session which is uploading the files}) の sc.file.upload.dir プロパティーで指定された一時ディレクトリーのサブディレクトリー内に配置されます。 App_Server_NameuserID、および JsessionID の値は、すべての特殊文字から除去されます。
  • ファイル・アップロード・ウィジェットの内部データ値 (FileUploadField) が SCFile:<Element_ID> に変更されます。 例:
    {User : { 
          UserId : "user1",
          attachFile : "SCFile:ext-comp-1037"
       }
    }
  • ファイルがサーバーに正常に送信された後、ファイル情報 (固有のファイル ID、ファイルの場所、ウィジェット ID など) を含む FileAttachments エレメントが、アップロードに使用される画面のデータ・オブジェクトに追加されます。 ファイル情報をデータベースに送信するための実際の API 呼び出しは、この入力で行われます。

    以下は、情報を追加した後のサンプル・データ・モデルの変更を示しています。

    {User : { 
          UserId : "user1",
          attachFile : "user1_1267599880675_1"
       }
    FileAttachments : {
         FileAttachment :
           {
            file_id : "user1_1267599880675_1",
            file_path : "att2.bmp",
            Element_ID : "ext-comp-1037"
           }
        }   
    }
次のような場合に、API に障害が生じます。
  • サーバーへの複数ファイルの送信が失敗する。
  • API 呼び出しの一部としてファイルをデータベースに保持しようとすると (つまり、ファイルがサーバー上に正常に置かれた後)、例外が発生する。

ファイルがサーバー上の一時的な場所から削除されると、イベントが呼び出されます。

ファイル削除の保護

ISecureFileDelete インターフェースにより、一時的なサーバーの場所にアップロードされているファイルをセキュアに削除できます。 yfs.properties ファイルの次のプロパティーを使用して、ISecureFileDelete インターフェースにプラグインします。

sc.secure.file.delete.impl=/*

sc.secure.file.delete.impl が ISecureFileDeleteの Java™ クラス実装への完全修飾パスであることを確認してください。 ISecureFileDelete インターフェース定義にはメソッドがあります。このメソッドを実装する必要があります。

         +
                   /**
                    * @param file is an existing file which has to be deleted
                    * from temporary location of the server. This method
                    * implementation gets called only when file exists
                    * on the server location. 
                    * @return true if the file delete is successful, false otherwise.
                    */
                    boolean deleteFile(File file);
デフォルトでは、セキュアなファイル削除が可能です。 セキュアなファイル削除のデフォルト実装がプラグインされています。 デフォルトの実装クラスは、'com.sterlingcommerce.woodstock.util.frame.file.impl.PLTSecureFileDeleteImpl' です。 プラグイン実装クラスが無効であるか、アクセスできない場合、ファイルは Java ファイル削除 API を使用して削除されます。