일반 스트러츠2 활용 Upload 예제

황제낙엽 2007.08.14 11:15 조회 수 : 192 추천:191

sitelink1  
sitelink2  
extra_vars5
extra_vars6 ko 

アプリケ?ション?

ファイルをアップロ?ドして、ファイル名とかサイズとかを表示するだけ。アップロ?ドされたファイルは「/WEB-INF/upload」フォルダに保存される。

スクリ?ンショット

 

??

??

 

必要なjar

  • commons-fileupload-1.1.1.jar
  • commons-io-1.1.jar
  • commons-logging-1.0.4.jar
  • freemarker-2.3.8.jar
  • log4j-1.2.14.jar
  • ognl-2.6.11.jar
  • struts2-core-2.0.6.jar
  • xwork-2.0.1.jar

 

FileUploadSampleAction.java

package struts2.sample10;
   
import java.io.File;
import java.io.IOException;
   
import javax.servlet.ServletContext;
   
import org.apache.commons.io.FileUtils;
import org.apache.struts2.StrutsStatics;
import org.apache.struts2.config.Result;
import org.apache.struts2.config.Results;
   
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
   
/**
 *
ファイルアップロ?ドのサンプル。
 */

@SuppressWarnings("serial")
@Results({
   
@Result(name="input",value="upload_input.jsp"),
   
@Result("upload_result.jsp")
})
public class FileUploadSampleAction extends ActionSupport {
   
   
/** アップロ?ドファイル */
   
private File upload;
   
   
//
   
// strutsが勝手に値をセットしてくれるプロパティ
   
//
   
/** ファイルのContent-Type(プロパティ名+「ContentType」) */
   
private String uploadContentType;
   
/** ファイル名(プロパティ名+「FileName」) */
   
private String uploadFileName;
   
   
//
   
// ?面表示用のプロパティ
   
//
   
/** ファイルサイズ */
   
private String fileSize;
   
   
   
/**
     *
初期表示メソッド
     */

   
public String input(){
       
return "input";
   
}
   
   
   
   
/**
     *
アクションを?行するメソッド。
     */

   
public String execute() throws IOException{
   
       
// /WEB-INF/upload」にファイルをコピ?してみよう
       
ActionContext ac = ActionContext.getContext();
       
ServletContext sc =
           
(ServletContext)ac.get(StrutsStatics.SERVLET_CONTEXT);
       
       
File uploadDir = new File(sc.getRealPath("/WEB-INF/upload"));
       
if(uploadDir.exists() == false){
            uploadDir
.mkdirs();
       
}
       
       
FileUtils.copyFile(upload, new File(uploadDir, uploadFileName));
       
       
       
// ファイルサイズをセットする
        fileSize
= FileUtils.byteCountToDisplaySize(upload.length());
       
       
return "success";
   
}
   
   
   
   
//
   
// setter getter
   
//
   
public File getUpload() {
       
return upload;
   
}
   
   
public void setUpload(File upload) {
       
this.upload = upload;
   
}
   
   
public String getUploadContentType() {
       
return uploadContentType;
   
}
   
   
public void setUploadContentType(String uploadContentType) {
       
this.uploadContentType = uploadContentType;
   
}
   
   
public String getUploadFileName() {
       
return uploadFileName;
   
}
   
   
public void setUploadFileName(String uploadFileName) {
       
this.uploadFileName = uploadFileName;
   
}
   
   
public String getFileSize() {
       
return fileSize;
   
}
   
   
public void setFileSize(String fileSize) {
       
this.fileSize = fileSize;
   
}
   
}

ファイルのアップロ?ドを?理するアクションクラス。
アップロ?ドされたファイルは、strutsが勝手に一時フォルダに保存します。
そんで、そのファイルを示すjava.io.Fileクラスのオブジェクトが、プロパティ(ここではupload)にセットされます。
その他に、ファイルの種類(「text/plain」みたいなの)を表す文字列が●●●●ContentType●●●●はアップロ?ドファイルのプロパティ名)にセットされます。
さらに、ファイル名が●●●●FileNameにセットされます。

アクションクラスがActionSupport?承すると、アップロ?ドの際に入力チェックがかかるようになります。
アップロ?ドしたファイルのサイズが上限を超えていた場合に、エラ?メッセ?ジがセットされて「input」の?面に?されるわけですな。

 

 

struts.properties

# アップロ?ドされたファイルが一時的に保存されるディレクトリ
# デフォルトでは、規定のtempディレクトリ(jspjava?スに?換したものが置かれ
# たりするフォルダ)に設定される。
# 指定しないでデフォルトに任せた方が良いと思う。
#struts.multipart.saveDir=upload_temp
   
# アップロ?ドファイルのサイズ上限(?位:バイト)
struts
.multipart.maxSize=10485760

ファイルのアップロ?ドに?する設定を書くことができます。
今回はクラスパスのル?トフォルダに作ってるので全?に適用されますが、アクションクラスと同じ名前のプロパティファイルに書けば、そのアクションクラスだけに適用されるみたいです。
(今回の例で言うと「struts2/sample10/FileUploadSampleAction.properties

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
                      http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
>
 
 
<display-name>ファイルアップロ?</display-name>
 
 
<filter>
   
<filter-name>struts2</filter-name>
   
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
   
<init-param>
     
<param-name>actionPackages</param-name>
     
<param-value>struts2.sample10</param-value>
   
</init-param>
 
</filter>
 
 
<filter-mapping>
   
<filter-name>struts2</filter-name>
   
<url-pattern>/*</url-pattern>
 
</filter-mapping>
 
</web-app>

いつもどおり

index.jsp

<% response.sendRedirect("fileUploadSample!input.action"); %>

index.jspを用意して、アクションのURLにリダイレクトするようにしました。(本編とはあんまり?係ありません。)

upload_input.jsp

<%@page pageEncoding="utf-8" %>
<%@taglib prefix="s" uri="/struts-tags" %>
   
<s:actionerror/>
<s:fielderror/>
<s:form action="fileUploadSample" method="post" enctype="multipart/form-data">
 
<s:file name="upload" label="アップロ?" size="80"/>
 
<s:submit name="送信"/>
</s:form>

入力?面。
ファイルのアップロ?ドをするときには、formタグにenctype="multipart/form-data"って書かないといけません。
ほんで、そのフォ?ムタグの中に<s:file>タグというのを書いてアップロ?ドの項目を作ればよいです。
<s:file>
タグのname?性がアクションクラスのFileプロパティになります。

upload_result.jsp

<%@page pageEncoding="utf-8" %>
<%@taglib prefix="s" uri="/struts-tags" %>
   
<h1>正常終了</h1>
   
<table>
 
<tr>
   
<td>ファイル名</td>
   
<td><s:property value="uploadFileName"/></td>
 
</tr>
 
<tr>
   
<td>ファイルの種類</td>
   
<td><s:property value="uploadContentType"/></td>
 
</tr>
 
<tr>
   
<td>ファイルサイズ</td>
   
<td><s:property value="fileSize"/></td>
 
</tr>
</table>

アップロ?ド結果の?
ファイル名とファイルの種類とファイルサイズを出力してます。

こんな感じでファイルのアップロ?ドはできました。
本家のサンプルを見てみると、複?ファイルのアップロ?ドも案外手?にできるみたいなことが書いてました。
File[]
とかListのプロパティを作っておけば勝手にセットしてくれるみたいな感じでしたが、?際に試してないので確かではないです。
またネタに困ったらやってみようと思います。

번호 제목 글쓴이 날짜 조회 수
31 스트러츠2 실습 예제 모음 (Struts Showcase) 황제낙엽 2008.11.20 57662
30 Struts2 시작하기 황제낙엽 2008.09.22 52212
29 스트러츠2 샘플 어플리케이션 (MailReader Demonstration Application) file 황제낙엽 2008.11.20 740
28 책 Starting Struts 2 - Free Online Version (InfoQ.com) file 황제낙엽 2008.07.11 585
27 MyEclipse를 사용한 Struts 빠른 시작 황제낙엽 2007.01.26 422
26 Validation과 Dispatcher액션 황제낙엽 2006.05.22 391
25 Struts GUI XML 작성 Tool 들 황제낙엽 2006.02.24 334
24 A Walking Tour of the Struts 2 MailReader Application (1) 황제낙엽 2008.12.10 292
23 샘플예제 file 황제낙엽 2009.03.02 280
22 EJB+JSP를 활용한 J2EE기반의 샘플 프로젝트 (JPetStore-5.0) 황제낙엽 2007.01.18 229
21 폼빈의 Reset 황제낙엽 2006.05.22 204
20 Struts2(스트럿츠2) Feature(특징) 황제낙엽 2008.07.12 202
» 스트러츠2 활용 Upload 예제 file 황제낙엽 2007.08.14 192
18 Struts 프로그래밍 메모 황제낙엽 2005.10.06 190
17 JpetStore 에서 Action과 Form을 함께 취급하는 클래스 BeanAction (JPetStore-4.0.5) 황제낙엽 2005.11.21 189
16 Struts-Config.xml 과 액션과 JSP의 관계 황제낙엽 2006.05.22 176
15 Struts와 Struts2의 로그인 매커니즘 비교 황제낙엽 2008.10.23 167
14 Struts 프레임워크를 이용한 효율적인 개발 전략 황제낙엽 2007.01.30 167
13 스트러츠로 작성된 웹서점 샘플화일 (Struts+Hsql) 황제낙엽 2005.11.24 166
12 A Walking Tour of the Struts 2 MailReader Application (2) 황제낙엽 2008.12.10 165