JavaServer Faces ユーザーズガイド
|
目次
|
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>
|
ファイルをアップロードする場合には、以下の定量制限があります。
- アップロードヘッダ長は1024バイト以内です。
アップロードヘッダには、項目名とファイル名の情報が含まれます。利用するブラウザによって多少異なりますが、項目名長とファイル名長を合わせて、970バイト程度を指定可能です。
アップロードヘッダ長が1024バイトを超えた場合は、IOExceptionをラップしたUUIRuntimeException例外が発生します。
- アップロードファイルサイズの上限はデフォルトで16MB(16*1024*1024バイト)です。このサイズは、前述のとおり、アプリケーションクラスでgetMimeTransferSizeLimitメソッドをオーバライドすることで変更できます。
アップロードファイルサイズの上限を超えた場合は、FacesMimeSourceから取得したストリームは、nullとなります。
- リクエストパラメタの解析サイズの上限はデフォルトで80MB(16*1024*1024*5バイト)です。このサイズは、前述のとおり、初期化パラメタ(uji.mimeParseSizeLimit)を指定することで変更できます。
リクエストパラメタのサイズが上限を超えた場合は、IOExceptionをラップしたUUIRuntimeException例外が発生します。
All Rights Reserved, Copyright © 富士通株式会社 2005