2.5.5. ファイルの転送サンプル

ファイル転送ライブラリを使用したサンプル

2.5.5.1. サンプルアプリケーションの内容

ここでは、ファイル転送ライブラリを利用したサンプルWebアプリケーション「サンプルファイル転送WebAP」の解説を記述します。

サンプル「サンプルファイル転送WebAP」は、以下のようなJSP、servletファイルで構成されています。

サンプルファイル転送WebAPの構成
図2.5.5.1-1 サンプルファイル転送WebAPの構成

※このサンプルはファイルI/Oを行うため、動作するServletコンテナの設定によっては実行時にセキュリティ違反が発生する場合があります。その際はpolicyファイルに、セキュリティ違反となったファイルに対して java.io.FilePermission を追加してください。
テスト用サーバでは以下にpolicyファイルが存在します。

設定例.

表2.5.5.1-1
%WebOTXディレクトリ%\domains\domain1\config\server.policy
grant codeBase "file:${com.nec.webotx.instanceRoot}/applications/fileupdownload/-" {
    permission java.io.FilePermission "${com.nec.webotx.instanceRoot}${/}applications${/}fileupdownload${/}-", "read,write,delete";
};


2.5.5.2. 実行方法

本サンプルWebアプリケーションを実行する手順について説明します。

  1. サンプルプロジェクト fileupdownload.zip をインポートします。
  2. 右クリック > サーバで実行 を選択します。
  3. http://Webサーバ名(ドメイン省略不可):ポート番号/fileupdownload/ にアクセスします。

2.5.5.3. サンプルアプリケーション内容解説

各処理の処理手順を記述します。

ファイルアップロード処理

アップロードサンプル画面
図2.5.5.3-1 アップロードサンプル画面

  1. 転送先ファイルパスを入力してリターンキーを押します。画面中段の「アップロード先のファイルパスを「」として選択ファイルをアップロードします。」に転送先ファイルパスが表示されていることを確認してください。
  2. 転送元ファイルパスを入力するか、参照ボタンをクリックしファイルを選択してください。
  3. UpLoadボタンをクリックするとアップロードリクエストがサーブレット(FtransServlet.class)に送信され、ファイルが転送されます。
ファイルダウンロード処理


図2.5.5.3-2 ダウンロードサンプル画面

  1. 転送元ファイルパスを入力してリターンキーを押します。画面中段の「「」をダウンロードできます」にファイルのURLが表示されていることを確認してください。
  2. ファイルのURLを右クリックし「対象をファイルに保存」を選択してください。
  3. 転送先(保存)ファイル名を設定しファイルをダウンロードします。
ファイル削除処理


図2.5.5.3-3 削除サンプル画面

  1. 削除するファイルパスを入力してリターンキーを押します。画面中段の「「」を選択ファイルとして削除します」にファイルパスが表示されていることを確認してください。
  2. Delete Fileボタンをクリックすると削除リクエストがサーブレット(FtransServlet.class)に送信され、ファイルが削除されます。
ファイル一覧取得処理


図2.5.5.3-4 一覧取得サンプル画面

  1. 一覧を取得するディレクトリパスを入力してください。画面下部にファイルの一覧がURL形式で表示されます。

2.5.5.4. ファイル転送ライブラリが提供する機能

ファイル転送ライブラリはWebコンテナに対してリクエストを送信するタグと受信したリクエストを処理するクラスの2つに分けられます。

ファイル転送タグ

ファイル転送タグには、次のタグがあります、詳細はファイル転送タグ リファレンスを参照してください。

表2.5.5.4-1
タグ名 タグ機能
SetUpLoadTag アップロード指定タグ
SelectUpLoadTag アップロードファイル選択タグ
SetDownLoadTag ダウンロードURL作成タグ
SetDelFileTag ファイル削除指定タグ
GetFileDirTag ファイル一覧取得タグ

ファイル転送クラス

ファイル転送クラスには、次のメソッドがあります、詳細は2.5.5.7. ファイル転送タグ リファレンス を参照してください。

・FileTransMngクラス
表2.5.5.4-2
メソッド名 メソッド機能
getTransferCtl 処理種別取得メソッド
getUpLoadFile アップロード処理メソッド
getUpLoadData アップロードデータ取得メソッド
deleteFile ファイル削除メソッド

2.5.5.5. タグの利用法について

ファイル転送ライブラリを利用したJSPファイルを実行するには、次の手順で行います。

  1. JSPファイルの作成
    JSPファイルは、コンテキストルート配下に作成します。

    /SampleUpLoad.jsp

    このJSPファイル内にtaglibディレクティブを記述します(ファイル転送タグのtldファイルはコンテキストルートfileupdownloadのWEB-INF配下に配置されています)。taglibディレクティブを記述する場合、次の2つの利用形式があります。

    (a)ファイル転送タグのtldファイルを直接指定する形式
    <%@ taglib uri="../WEB-INF/Ftrnmngtag.tld" prefix="trn" %>
    〜
    <body>
    <form name="ftran1" <trn:setUpLoad action="FileTrans" uppath="upload.txt"/>>
      <trn:selectUpLoad size="50"/><br>
      <INPUT type="submit" value="Up Load">
    </form>
    〜
    </body>
    
    上記のように、taglibディレクティブのuri属性にファイル転送タグのtldファイルを指定し、prefix属性に任意の文字列(ここでは"trn")を指定すると、 <prexfix属性指定:タグ名〜>というタグ形式でファイル転送タグを利用できます。

    (b)「/WEB-INF/web.xml」を利用する形式
    <%@ taglib uri="filetransfer" prefix="trn" %>
    〜
    <body>
    <form name="ftran1" <trn:setUpLoad action="FileTrans" uppath="upload.txt"/>>
      <trn:selectUpLoad size="50"/><br>
      <INPUT type="submit" value="Up Load">
    </form>
    〜
    </body>
    

    上記のようにuri属性を指定した場合、「/WEB-INF/web.xml」 に次の記述を追加することで、ファイル転送タグを利用できます。

    <taglib>
      <taglib-uri>filetransfer</taglib-uri>
      <taglib-location>/WEB-INF/Ftrnmngtag.tld</taglib-location>
    </taglib>
    
  2. JSPファイルの実行 以上の作成および配置が完了しましたら、ファイル転送ライブラリを用いたJSPファイルが実行できます。ブラウザから、次のURLにアクセスします。

    http://Webサーバ名(ドメイン省略不可):ポート番号/fileupdownload/SampleUpLoad.jsp

2.5.5.6. ファイル転送ライブラリの使用について

本ファイル転送ライブラリの利用手順を、ファイル転送ライブラリのサンプルアプリケーション「サンプルファイル転送WebAP」を例に説明します。各タグ機能および属性指定方法の詳細については、ファイル転送タグ リファレンスを参照してください。 ※説明に使用するソースは一部簡略化している為、実際のソースと異なる個所があります。

ファイルアップロード処理
  1. ファイルアップロードリクエストの設定 JPSファイルのformタグにファイルアップロードタグ(アップロードファイル選択タグ)を使用することでWebコンテナにファイルアップロード要求をリクエストすることができます。
    <%@ taglib uri="../WEB-INF/Ftrnmngtag.tld" prefix="trn" %>
    <body>
      <form name="ftran1"<trn:setUpLoad action="FileTrans" uppath="upload.txt"/>>
        <trn:selectUpLoad size="50"/><br>
        <INPUT type="submit" value="Up Load">
      </form>
    </body>
    
    上記のJSPソースを「Up Loadボタン」を押して実行すると「サーブレットのFileTransにselectUpLoadタグで選択したファイルを、upload.txtというファイル名で保存して下さい」という内容のアップロードリクエストを送信します。
  2. ファイルアップロード実行の設定 ファイルアップロードリクエストを受信し、ファイル転送クラス(ファイルアップロード処理)を実行することでファイルをアップロードします。
    ・サーブレットFileTrans
    public void doPost( HttpServletRequest req, HttpServletResponse res)
      throws ServletException,IOException {
    
      // ファイル転送クラスの生成
        filetransmng = new FileTransMng(getServletContext());     
        
      // 処理種別の取得
        int action = filetransmng.getTransferCtl( req );
    
       if( action == FileTransMng.ACT_UPLOAD ) {
         // ファイルアップロード処理
           String putpath = filetransmng.getUpLoadFile( req );
         out.println("ファイル["+putpath+"]のアップロードが完了しました。");
       }
    }
    

    リクエストに対する上記処理を実行すると、selectUpLoadタグで選択されたファイルがコンテキストルート(fileupdownload/)にupload.txtの名前で保存されます。

ファイルダウンロード処理
  1. ダウンロードURLの作成 JPSファイルにダウンロードURL作成タグを使用することで、指定したファイルのURLを作成することができます。
    <%@ taglib uri="../WEB-INF/Ftrnmngtag.tld" prefix="trn" %>
    <body>
      <a href="<trn:setDownLoad downpath="subdir/download.txt"/>">
        <trn:setDownLoad downpath="subdir/download.txt"/>
      </a>
    </body>
    
    上記のJSPソースを実行するとブラウザ上に指定したファイル(fileupdownload/subdir/download.txt)のURLが表示されます。表示されたURLを元にブラウザの「対象をファイルに保存」機能を使用することで、ダウンロードを行います。
ファイル削除処理
  1. ファイル削除リクエストの設定 JPSファイルのformタグにファイル削除タグを使用することでWebコンテナにファイル削除要求をリクエストすることができます。
    <%@ taglib uri="../WEB-INF/Ftrnmngtag.tld" prefix="trn" %>
    <body>
      <form name="ftran1" <trn:setDelFile action="FileTrans" delpath="delete.txt" type="1"/>>
        <INPUT type="submit" value="Delete File">
      </form>
    </body>
    
    上記のJSPソースを「Delete Fileボタン」を押して実行すると「サーブレットのFileTransに選択したファイル(delete.txt)を、削除して下さい」という内容の削除リクエストを送信します。
  2. ファイル削除実行の設定 ファイル削除リクエストを受信し、ファイル転送クラス(ファイル削除処理)を実行することでファイルを削除します。
    ・サーブレットFileTrans
    public void doPost( HttpServletRequest req, HttpServletResponse res)
      throws ServletException,IOException {
    
      // ファイル転送クラスの生成
       filetransmng = new FileTransMng(getServletContext());
       
      // 処理種別の取得
       int action = filetransmng.getTransferCtl( req );
    
      if( action == FileTransMng.ACT_DELETEFILE ) {
        // ファイル削除処理
         filetransmng.deleteFile( req );
    
        out.println("ファイルの削除が完了しました");
      }
    }
    
    リクエストに対する上記処理を実行すると、指定ファイル(fileupdownload/delete.txt)が削除されます。
ファイル一覧取得処理
  1. ファイル一覧の取得 JPSファイルにファイル一覧取得タグを使用することで、指定したディレクトリパスの配下にあるファイルの一覧を取得できます。
    <%@ taglib uri="../WEB-INF/Ftrnmngtag.tld" prefix="trn" %>
    <body>
      <SELECT size="5">
        <trn:getFileDir dirpath="FileTransSample/">
          <OPTION><%=(String)pageContext.getServletContext().getAttribute("FILEDIR")%>
        </trn:getFileDir>
      </SELECT>
    </body>
    
    上記のJSPソースを実行するとブラウザ上に指定したディレクトリ(fileupdownload/FileTransSample/)配下のファイル一覧がURL形式で表示されます。

2.5.5.7. ファイル転送タグ リファレンス

setUpLoadTag タグ

formタグ中に記述する事でリクエストパラメータにアップロード指示を設定します。アップロードファイル選択タグと組み合わせて使用します。

表2.5.5.7-1
タグボディ形式 JSP形式
返却スクリプト変数 なし
使用可能箇所 formタグ中
指定属性
属性名 指定省略 変数定義 説明
action 必須 不可 formタグのaction(リクエスト先)を設定します。
dtname 必須 可能 アップロード先のファイルパスをコンテキストルートからの相対パスで設定します。
プロパティ なし

使用例


example : SetUpLoadTag使用例
  <%@ taglib uri="../WEB-INF/Ftrnmngtag.tld" prefix="trn" %>
  〜
  <body>
    <form name="ftran1" <trn:setUpLoad action="FileTrans" uppath="upload.txt"/>>
      <trn:selectUpLoad size="50"/><br>
      <INPUT type="submit" value="Up Load">
    </form>
  〜
  </body>

selectUpLoadTag タグ

アップロードするファイルの選択を行う処理をHTML中に出力します。

表2.5.5.7-2
タグボディ形式 JSP形式
返却スクリプト変数 なし
使用可能箇所 setUpLoadTagの指定されたformタグ中
指定属性
属性名 指定省略 変数定義 説明
size 省略可 不可 ファイル名入力欄のサイズを入力します。
プロパティ なし

使用例


example : selectUpLoadTag使用例
    <%@ taglib uri="../WEB-INF/Ftrnmngtag.tld" prefix="trn" %>
    〜
    <body>
      <form name="ftran1" <trn:setUpLoad action="FileTrans" uppath="upload.txt"/>>
        <trn:selectUpLoad size="50"/><br>
        <INPUT type="submit" value="Up Load">
      </form>
    〜
    </body>

setDownLoadTag タグ

コンテキストルートからの相対パスを指定することでURLを編集し、HTML中に出力します。

表2.5.5.7-3
タグボディ形式 JSP形式
返却スクリプト変数 なし
使用可能箇所 制限なし
指定属性
属性名 指定省略 変数定義 説明
downpath 必須 可能 ダウンロード対象のファイルパスをコンテキストルートからの相対パスで設定します。
プロパティ なし

使用例


example : setDownLoadTag使用例
    <%@ taglib uri="../WEB-INF/Ftrnmngtag.tld" prefix="trn" %>
    <body>
      <a href="<trn:setDownLoad downpath="subdir/download.txt"/>">
        <trn:setDownLoad downpath="subdir/download.txt"/>
      </a>
    </body>

setDelFileTag タグ

formタグ中に記述する事でリクエストパラメータにファイル削除を設定します。

表2.5.5.7-4
タグボディ形式 JSP形式
返却スクリプト変数 なし
使用可能箇所 formタグ中
指定属性
属性名 指定省略 変数定義 説明
action 必須 不可 formタグのaction(リクエスト先)を設定します。
delpath 必須 可能 削除対象のファイルパスをコンテキストルートからの相対パスで設定します。
type 省略可 不可 削除対象のファイルパスがディレクトリで 1 を設定した場合、指定ディレクトリ以下が全削除されます。 削除対象のファイルパスがディレクトリで 0 を設定した場合、指定ディレクトリ配下の全ファイルが削除されます。 削除対象のファイルパスがファイルであった場合は無視されます。
プロパティ なし

使用例


example : setDelFileTag使用例
    <%@ taglib uri="../WEB-INF/Ftrnmngtag.tld" prefix="trn" %>
    <body>
      <form name="ftran1" <trn:setDelFile action="FileTrans" 
                                   delpath="delete.txt" type="1"/>>
        <INPUT type="submit" value="Delete File">
      </form>
    </body>

getFileDirTag タグ

指定したディレクトリのファイル(URL形式)の一覧を取得します。取得した一覧は、タグ内でループしつつgetAttribute()で"FILEDIR"の名前で取得します。

表2.5.5.7-5
タグボディ形式 JSP形式
返却スクリプト変数 なし
使用可能箇所 制限なし
指定属性
属性名 指定省略 変数定義 説明
dirpath 必須 可能 一覧取得対象のディレクトリをコンテキストルートからの相対パスで設定します。
プロパティ なし

使用例


example : GetFileDirTag使用例
    <%@ taglib uri="../WEB-INF/Ftrnmngtag.tld" prefix="trn" %>
    <body>
      <SELECT size="5">
        <trn:getFileDir dirpath="FileTransSample/">
          <OPTION><%=(String)pageContext.getServletContext().getAttribute("FILEDIR")%>
        </trn:getFileDir>
      </SELECT>
    </body>

2.5.5.8. ファイル転送クラス リファレンス

getTransferCtl メソッド

リクエストより処理種別を抽出します。

表2.5.5.8-1
パラメータ
引数名 引数の型 説明
HTTPリクエスト HttpServletRequest サーブレットのリクエストを設定します。
例外 FileTransMngException
戻り値 処理種別
2:FileTransMng.ACT_UPLOAD(ファイルアップロード)
4:FileTransMng.ACT_DELETEFILE(ファイル削除)
使用可能箇所 制限なし

使用例


example : getTransferCtl()使用例
     filetransmng = new FileTransMng(getServletContext());
    int action = filetransmng.getTransfarCtl( req );

    if( action == FileTransMng.ACT_UPLOAD ) {
      // ファイルアップロード処理
        String putpath = filetransmng.getUpLoadFile( req );
    } else if( action == FileTransMng.ACT_DELETEFILE ) {
      // ファイル削除処理
        filetransmng.deleteFile( req );
    }

getUpLoadFile メソッド

アップロードリクエストを処理します。リクエスト中のファイルデータを抽出し、指定ファイルに格納します。

表2.5.5.8-2
パラメータ
引数名 引数の型 説明
HTTPリクエスト HttpServletRequest サーブレットのリクエストを設定します。
例外 FileTransMngException、IOException
戻り値 格納したファイルへのパス
使用可能箇所 ファイルアップロードリクエストの場合

使用例


example : getUpLoadFile()使用例
     filetransmng = new FileTransMng(getServletContext());
    int action = filetransmng.getTransfarCtl( req );

    if( action == FileTransMng.ACT_UPLOAD ) {
      // ファイルアップロード処理
        String putpath = filetransmng.getUpLoadFile( req );
    } else if( action == FileTransMng.ACT_DELETEFILE ) {
      // ファイル削除処理
        filetransmng.deleteFile( req );
    }

getUpLoadData メソッド

アップロードリクエストを処理します。アップロードされたファイルをリクエストより抽出、ファイル名とバイナリデータを取得します。

表2.5.5.8-3
パラメータ
引数名 引数の型 説明
HTTPリクエスト HttpServletRequest サーブレットのリクエストを設定します。
例外 FileTransMngException、IOException
戻り値 TransDataクラス ※使用例参照
使用可能箇所 ファイルアップロードリクエストの場合

使用例


example : getUpLoadData()使用例
     filetransmng = new FileTransMng(getServletContext());
    int action = filetransmng.getTransfarCtl( req );

    if( action == FileTransMng.ACT_UPLOAD ) {
       // ファイルアップロード処理
       TransData transdata = filetransmng.getUpLoadData( req );
    } else if( action == FileTransMng.ACT_DELETEFILE ) {
        // ファイル削除処理
        filetransmng.deleteFile( req );
    }
    
TransDataクラスについて
      アップロードデータアクセスメソッド
        ・byte[] getTransData() : アップロードデータ取得
        ・String getTransName() : アップロードファイル名取得

deleteFile メソッド

ファイル削除リクエストで指定されたファイル(ディレクトリ)を削除します。

表2.5.5.8-4
パラメータ
引数名 引数の型 説明
HTTPリクエスト HttpServletRequest サーブレットのリクエストを設定します。
例外 FileTransMngException、IOException
戻り値 なし
使用可能箇所 ファイル削除リクエストの場合

使用例


example : deleteFile()使用例
     filetransmng = new FileTransMng(getServletContext());
    int action = filetransmng.getTransfarCtl( req );

    if( action == FileTransMng.ACT_UPLOAD ) {
      // ファイルアップロード処理
        String putpath = filetransmng.getUpLoadFile( req );
    } else if( action == FileTransMng.ACT_DELETEFILE ) {
      // ファイル削除処理
        filetransmng.deleteFile( req );
    }