PGBox
P
G
Box

ファイルダウンロード

機能リファレンスのメニューへ戻る



使用した環境
JDK 6 Update 11
struts 1.3.10

DownloadActionを使用してファイルのダウンロード処理を行うサンプルです。


DownloadActionを使用する事で、簡単かつシンプルにファイルのダウンロード処理を実装する事ができます。

以下は、サーバ上に保存されているPDFファイルをダウンロードして、ブラウザ上に表示するサンプルになります。
import java.io.File;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.DownloadAction;

public class SampleAction extends DownloadAction {        // (1)
    
    
    /*
     * ファイルダウンロードの際のバッファサイズ(byte)を返す
     * @see org.apache.struts.actions.DownloadAction#getBufferSize()
     */
    @Override
    protected int getBufferSize() {
        return 1024 * 1024;                                    // (2)
    }
    
    /*
     * ダウンロード対象のストリーム情報を作成して返す
     * @see org.apache.struts.actions.DownloadAction#getStreamInfo(...
     */
    @Override
    protected StreamInfo getStreamInfo(
            ActionMapping mapping
            , ActionForm form
            , HttpServletRequest request
            , HttpServletResponse response) throws Exception {

        File file = new File("【サーバ上のPDFが保存されているパス】");
        StreamInfo streamInfo = new FileStreamInfo("application/pdf", file);    // (3)
        
        return streamInfo;
    }
    
}

(1) Actionではなく、DownloadActionを継承します。 
  Actionを継承する場合と異なり、executeメソッドのオーバーライドは必要ありません。
  かわりにgetStreamInfoメソッドをオーバーライドする必要があります。

(2) getBufferSizeメソッドをオーバーライドすると、任意のバッファサイズが指定できるようになります。
  このサンプルの場合1Mbyteを指定しています。
  オーバーライドを省略した場合は、デフォルトの4096byteとなります。

(3) getStreamInfoメソッドでは、StreamInfoのインスタンスを返す必要があります。
  このサンプルではstrutsであらかじめ用意されているFileStreamInfoを生成しています。
  FileStreamInfoは、サーバ上のファイルを読み取ってダウンロードを行うためのStreamInfoのサブクラスです。
  コンストラクタの第一引数には、PDF用のContent-Typeである"application/pdf"を指定しています。


StreamInfoにセットしたストリームは、ダウンロード処理が終了した際に自動的にcloseされます。
また、ダウンロードの処理中にExceptionが発生した場合であってもストリームのcloseは呼ばれるようになっていますので、読み取り対象のファイルが開かれっぱなしになるような事はありません。








機能リファレンスのメニューへ戻る