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

第3部 Webアプリケーションの開発> 第16章 APIを使ったプログラミング> 16.2 バイナリファイルの送受信

16.2.1 ファイルをアップロードする

Webcoordinatorはバイナリファイルの送受信の機能を持っています。ファイルのアップロード・ダウンロードのアプリケーションを簡単に作成できます。 ファイルをアップロードするアプリケーションは以下のように作成します。 アップロードしたファイルを受け取るBeanのプロパティを、com.fujitsu.uji.util.MimeSource型に定義します。

import com.fujitsu.uji.util.MimeSource;

public class UpBean extends com.fujitsu.uji.DataBean {
    protected MimeSource file;

    public MimeSource getFile() {
        return file;
    }
    public void setFile(MimeSource file) {
        this.file = file;
    }
}
入出力ページは以下のように作成します。
・formタグにenctype="multipart/form-data"を追加します。
・ファイル名入力の入力フィールドをtype="file"とします。また初期値を削除します。

<%@ taglib uri="uji-taglib" prefix="uji" %>
<uji:useBean id="body" cls="updown.UpBean" request="true" />
<FORM method="post" enctype="multipart/form-data">
    <INPUT name="uji.verbs" type="hidden" value="upload"> 
    <INPUT name="uji.id" type="hidden" value="head">ファイル名: 
    <INPUT type="file" name="file" > 
    <BR>
    <INPUT name="upload" type="submit" value="送信"> 
</FORM>
ビジネスクラスでは、Beanからストリームとファイルを取り出すことができます。 サーバに格納する場合は、サーバ上の絶対パスを指定します。

import java.io.InputStream;
import com.fujitsu.uji.util.MimeSource;
.....
    public void upload(DispatchContext context, UpBean dataBean) {
        MimeSource source = dataBean.getFile();
        InputStream is = source.getInputStream();
        String fname = source.getFileName();
        ....
    }
.....
ファイルの取り出しが終了したら、MimeSource型のプロパティにnullを設定します。このようにしてMimeSourceへの参照を削除することにより、ガーベジコレクタがMimeSourceを破棄できるようになります。MimeSourceが破棄された時点でリソースが解放されます。

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

// ファイル転送の最大サイズです。単位はバイトです。0は無制限を表します。
  public long getMimeTransferSizeLimit() {
    // 転送サイズの上限を32Mバイトにします。
    return 32*1024*1024;
  }

// ファイル転送時に準備するメモリサイズです。単位はバイトです。
  public int getMimeTransferMemorySize() {
    // 転送時に準備するメモリサイズを1Mバイトにします。
    return 1024*1024;
  }
ファイルをアップロードする場合には、以下の定量制限があります。 これらの定量制限を超えた場合は、IOException例外が発生します。 発生した例外はDispatchExceptionクラスでラップされ、セションクラスに実装したhandleExceptionメソッド、アプリケーションクラスに実装したhandleExceptionメソッドに通知されます。なお、handleExceptionメソッドを使用するには、Postprocessorインタフェースをセションクラスまたはアプリケーションクラスに実装する必要があります。 handleExceptionメソッドの使用方法については、エラー処理を参照してください。
目次 前ページ次ページ

All Rights Reserved, Copyright © 富士通株式会社 2000-2005