ファイルアップロード
ファイルをアップロードする場合は、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例外が発生します。
注意
ファイルのアップロード機能はJ2EE環境でのみ利用できます。
ファイルダウンロード
ファイルをダウンロードする場合は、managed beanにダウンロードを実行するアクションメソッド追加し、com.fujitsu.uji.faces.FacesMimeSupportクラスのfillResponseメソッドを実行します。
import java.io.File; import com.fujitsu.uji.faces.FacesMimeSupport; public class MyBean { ..... public String download() { // ダウンロードするファイルを取得します File file = getDownloadFile(); try { // ダウンロードを実行します FacesMimeSupport.fillResponse(file); } catch(Exception e) { e.printStackTrace(); } return "ok"; } ..... }
<f:view> <uji:form name="myform" > <uji:pushButton bean="myBean" property="button" label="ダウンロード" action="#{mybean.download}"/> </uji:form> </f:view>
注意
ファイルのダウンロード機能はJ2EE環境でのみ利用できます。