Struts1.3.5でファイルアップロード

感想おまちしてます!

Strutsでは簡単にファイルアップロードができる。

スポンサーリンク

Formを用意する

StrutsではファイルをFormFileクラスで操作する。Formにはこのゲッター、セッターを作ればいいだけ。

 private FormFile file;
public FormFile getFile() {
return file;
}


public void setFile(FormFile file) {
this.file = file;
}

ファイルアップロードAction 

FormFile.getInputStream()でInputStreamが取得できるので、これを使って、ファイルに書き出したり、よきにはからえばいい。

下の例では、メモリ上にロードしている。

   FormFile formFile = f.getFile();

if(formFile != null){

InputStream is = null;
BufferedInputStream bis = null;
ByteArrayOutputStream baos = null;
BufferedOutputStream bos = null;

try{
is = formFile.getInputStream();
bis = new BufferedInputStream(is, 1024);

baos = new ByteArrayOutputStream(1024);
bos = new BufferedOutputStream(baos);

int data = 0;
while((data = bis.read()) != -1){
bos.write(data);
}

bos.flush();

//TODO
logger.trace(baos.toString());


}catch(FileNotFoundException fnfe){
fnfe.printStackTrace();
return map.findForward("error);

}catch(IOException ioe){
ioe.printStackTrace();
return map.findForward("error);

}finally{
try{
bos.close();
//baos.close();
bis.close();
is.close();

formFile.destroy();

}catch(IOException ioe){
ioe.printStackTrace();
return map.findForward("error);
}
}
}

return map.findForward("sucess);

JSPの記述

フォームタグのenctype属性に「multipart/form-data」を指定しなければならない。これを忘れるとJSPを表示したときに真っ白になってしまう。

<html:form action="/UploadAction" enctype="multipart/form-data">

struts-config.xmlの設定

struts-config.xmlではファイルアップロードの設定ができる。action-mappingタグとmessage-resourceタグの間にcontrollerタグを記述。ファイルの最大数、バッファのサイズ、一時フォルダの指定が可能。

 <controller maxFileSize="500K"
bufferSize="500"
tempDir="c:/temp" />

QA 

画面が真っ白に

html:fileタグを使ってるフォームには「enctype=”multipart/form-data」を指定しないとダメ。これやらないと真っ白の画面が表示されるみたい。