JavaServer Faces ユーザーズガイド
目次 前ページ次ページ

第6章 Apcoordinatorの各機能の利用方法> 6.1 バイナリファイルの送受信

6.1.1 ファイルアップロード

ファイルをアップロードする場合は、managed beanにcom.fujitsu.uji.faces.FacesMimeSource型のプロパティを追加します。

import com.fujitsu.uji.faces.FacesMimeSource;

public class MyBean {
  protected FacesMimeSource file;
  public FacesMimeSource getFile(){
    return file;
  }
  public void setFile(FacesMimeSource file){
    this.file = file;
  }
}

次にuji:formタグにenctype="multipart/form-data"を追加します。このとき、beanアトリビュートとpropertyアトリビュートで指定された場所にアップロードしたファイルが格納されます。

<f:view>
  <uji:form name="myform" method="post" enctype="multipart/form-data" >
    <uji:input type="file" bean="myBean" property="file" />
    <uji:pushButton label="送信" action="#{mybean.doAction}"/>
  </uji:form>
</f:view>
アクションメソッドでは、FacesMimeSourceからストリームとファイルを取り出すことができます。 サーバに格納する場合は、サーバ上の絶対パスを指定します。

import java.io.InputStream;
.....
    public String doAction() {
        String fileName = null;
        InputStream is = null;
        if (file != null) {
            fileName = file.getFileName();
            is = file.getInputStream(); 
        }
        ....
    }
.....

ファイル転送のパラメタはアプリケーションクラスおよび初期化パラメタで指定します。
アプリケーションクラスの以下のメソッドをオーバライドすることで、転送サイズの上限、転送時に使用するメモリサイズ(超えると作業ファイルを使用)を指定することができます。デフォルトは、転送サイズの上限が16Mバイト、メモリサイズが1Mバイトです。

// ファイル転送の最大サイズです。単位はバイトです。0は無制限を表します。
  public long getMimeTransferSizeLimit() {
    // 転送サイズの上限を32Mバイトにします。
    return 32*1024*1024;
  }
// ファイル転送時に準備するメモリサイズです。単位はバイトです。
  public int getMimeTransferMemorySize() {
    // 転送時に準備するメモリサイズを1Mバイトにします。
    return 1024*1024;
  }
初期化パラメタ(uji.mimeParseSizeLimit)を指定すると、リクエストパラメタの解析サイズの上限を指定することができます。デフォルトは、ファイル転送サイズの上限の5倍です。ファイル転送の最大サイズを超えたファイルをアップロードした場合、ファイルデータは破棄されますが、リクエストパラメタの解析サイズの上限に達するまで、リクエストパラメタの解析は継続されます。

    <!--
       ファイルをアップロードをする場合のパラメタ解析サイズの上限です。単位はバイトです。
       パラメタ解析サイズの上限を40Mバイトにします。
    -->
    <context-param>
      <param-name>uji.mimeParseSizeLimit</param-name>
      <param-value>41943040</param-value>
    </context-param>

ファイルをアップロードする場合には、以下の定量制限があります。
目次 前ページ次ページ

All Rights Reserved, Copyright © 富士通株式会社 2006-2007