PGBox
P
G
Box

ファイルアップロード

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



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

strutsのファイルアップロード機能のサンプルです。


まず、struts-configのcontrollerタグで以下のように指定します。
struts-config内にcontrollerタグがない場合は新たに追加してください。この際、controllerタグは、</action-mappings>と<message-resources />の間に記述しなければなりませんので注意してください。

<controller 
    maxFileSize="1024K"
    memFileSize="256K"
    tempDir="c:/temp" 
    bufferSize="4096" />

それぞれの属性の意味は以下のようになります。必要に応じて書き換えてください。
属性概要
maxFileSizeアップロード可能な最大ファイルサイズを指定。デフォルトは250M。
memFileSizeアップロードファイルをメモリで保持する最大サイズ。このサイズを超えるファイルの場合はtempDirで指定された一時ディレクトリに、アップロード中のファイルが作成される。デフォルトは256K
tempDirmemFileSizeで指定された以上のサイズのファイルがアップロードされた場合に、アップロード中のファイルを保存するディレクトリを指定。
bufferSizeアップロード処理中のバッファサイズを指定する。大容量ファイルのアップロードが想定される場合は大きめに設定しておくと、処理が少し効率的になる。デフォルトは4096。



フォームでは、以下のようにアップロードファイルを受け取るプロパティの型をorg.apache.struts.upload.FormFileにします。
import org.apache.struts.upload.FormFile;

public class SampleForm extends ActionForm {

    /** アップロードファイル */
    private FormFile uploadFile;

    ※ 以下setter, getter
}


JSPでは、以下のように記述します。
<html:form action="/sample" enctype="multipart/form-data">
    
    <html:file property="uploadFile" />
    <html:submit value="アップロード" />
    
</html:form>
<html:form>タグでenctype属性を"multipart/form-data"と指定し、マルチパート形式のリクエスト送信を指定する事で、ファイルのアップロードが行えるようになります。


以下は、アップロードされたファイルを処理するアクションです。
サンプル処理として、アップロードされたファイルをサーバのローカルディスクに保存する処理を行っています。
public class SampleAction extends Action {
    
    @Override
    public ActionForward execute(ActionMapping mapping, ActionForm form0, ...
        SampleForm form = (SampleForm) form0;

        // アップロードファイル情報を取得
        FormFile uploadFile = form.getUploadFile();
        
        // アップロードされたファイル名を取得
        String fileName = uploadFile.getFileName();

        // アップロードされたファイルのサイズを取得
        int fileSize = uploadFile.getFileSize();
        
        // ファイルサイズが0の場合はファイルがアップロードされていないので、0より大きい場合のみ処理を行う
        if (fileSize > 0) {
            
            // アップロードされたファイルをサーバ上のローカルディスクに保存する。
            InputStream in = null;
            FileOutputStream out = null;
            try {
                in = uploadFile.getInputStream();
                
                out = new FileOutputStream("【ファイル保存先のパスを指定】");
                byte[] buffer = new byte[1024];
                int readed = -1;
                while ((readed = in.read(buffer)) != -1) {
                    out.write(buffer, 0, readed);
                }
            } finally {
                try { in.close(); } catch (Exception e) {}
                try { out.close(); } catch (Exception e) {}
                
                // 一時ディレクトリに保存されたアップロードファイルの削除を行う
                uploadFile.destroy();
            }
            
        }
        
        return mapping.findForward("success");
    }
    
}





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