본문 바로가기
IT/Struts2

스트럿츠2 파일 업로드 예제

by Jeami 2013. 7. 31.
반응형



스트럿츠2 파일 업로드 예제



스트럿츠2 파일 업로드 예제입니다.

단일 파일 업로드를 진행하겠습니다.


프로젝트 생성

프로젝트명 : Web0724 

src 아래

    |-- acction 패키지 생성 후

          |-- FileUploadAction.java 생성

WebContent 아래

    |-- jsp 폴더 생성 후

        |-- fileUpload.jsp 생성  

        |-- fileUploadOK.jsp 생성

=======================================================

이렇게 간단한 프로젝트를 하나 만들어주세요.

기본적인 struts.xml 및 web.xml 파일 생성에 대해선 생략하였습니다.









추천은 블로거에게 큰 힘이 됩니다(로그인 불필요)

양질의 정보로 보답 드리겠습니다^^





FileUploadAction.java 

package action;

import java.io.File; //File 업로드를 위한 java.io.File 임포트

import org.apache.commons.io.FileUtils;

import com.opensymphony.xwork2.Action;


public class FileUploadAction implements Action{

//업로드 폴더 설정(변경하지 못하도록 상수로 설정)

private static final String UploadPath="C:/ZOOM/upload"; 

  //서버에 올라온 파일 이름이 upload 라면 ContentType의 이름은 uploadContentType 로..

  //FileName의 이름은 uploadFileName으로 지정해주는 부분.(대소문자 구별)

private File upload;

private String uploadContentType; //파일타입 설정 변수

private String uploadFileName; //파일이름 설정 변수

File saveFile;

//파일 getter/setter 설정

//saveFile 과 UploadPath 는 제외해줘야 합니다.

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;

}


@Override

public String execute() throws Exception {

if( upload != null && upload.exists() ){

saveFile = new File(UploadPath+uploadFileName);

FileUtils.copyFile(upload, saveFile);

}//if end

return SUCCESS;

}//end

}//class END


파일을 업로드 하게 되면, 실제 파일은 서버에서 java.io.File 이라는 형태로 넘어옵니다. 따라서 넘어오는 그 파일의 이름과 타입이 필요하게 되는 것인데요. 그래서 ContentType 과 FileName 을 선언해주어야 합니다.

중요한 점은, 임의로 프로그래머가 이름을 만들어줄 수 있는 것이 아니라 이 두 속성은 인터셉터를 통해 자동으로 받아오게 되는 것이므로 일정 패턴과 규칙을 지켜 이름을 정의해주어야 한다는 것입니다.

대소문자는 꼭 구분해주셔야 하겠습니다.



위의 코딩 해석은 아래와 같습니다. execute()

1. UploadPath 변수에 저장할 파일의 폴더 위치를 지정.

2. 업로드된 파일의 경로와 파일명을 saveFile 이라는 File 객체에 보관.

3. FileUtils 의 copyFile 메소드로 현재 업로드된 파일을 saveFile 객체로 복사.

4. 결과적으로 UploadPath에 정의해놓은 경로에 해당 파일이 저장됨.





struts.xml

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE struts PUBLIC

    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"

    "http://struts.apache.org/dtds/struts-2.0.dtd">

    

 <struts>

     <constant name="sturs.multipart.maxSize" value="104857600" />     

  <package name="Web0724"     extends="struts-default">

     

     <action name="FileUploadForm" class="action.FileUploadAction">

         <result>/jsp/fileUpload.jsp</result>          

     </action>

     <action name="FileUploadAction" class="action.FileUploadAction">

         <result name="input">/jsp/fileUpload.jsp</result>

         <result>/jsp/fileUploadOK.jsp</result>          

     </action>

 

  </package>

 </struts>

 




fileUpload.jsp

<%@ page language="java" contentType="text/html; charset=EUC-KR"

    pageEncoding="EUC-KR"%>

<%@ tablib prefix="s" uri="/struts-tags" %>


<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">

<title>fileUpload.jsp 페이지</title>

</head>

<body>

<h1>File Upload Input Form</h1>

<s:form action="FileUploadAction" method="POST" enctype="multipart/form-data">

<s:file name="upload" label="File" size="50" />

<s:submit value="Save" />

<s:reset value="Cancel" />

</s:form>

</body>

</html>

 <s:file> 태그를 이용한 파일 업로드 폼을 작성해보았습니다.

특히 어려운 부분은 없는데요. 반드시 확인해야 할 부분이 있습니다.

<s:file name="upload" label="File" size="50" />

이 부분에서 name 속성값은 action 클래스에서 정의해놓은 이름과 반드시 같아야 한다는 것입니다.

private File upload;

<s:file> 태그와 java.io.File 객체 이름의 관계를 눈여겨 봐주세요.

 

그리고, 살펴볼 부분은

<s:form action="FileUploadAction" method="POST" enctype="multipart/form-data">

파일 업로드시 폼은 반드시 enctype="multipart/form-data" 로 폼에다가 반드시 작성해주셔야 한다는 사실!!
잊어버리지 마세요^^

 




fileUploadOK.jsp

<%@ page language="java" contentType="text/html; charset=EUC-KR"

    pageEncoding="EUC-KR"%>

<%@ taglib prefix="s" uri="/struts-tags" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">

<title>fileUploadOK.jsp</title>

</head>

<body>

<h1>FileUpload Success Page</h1>


<ul>

<li>ContentType: <s:property value="uploadContentType" /></li>

<li>FileName: <s:property value="uploadFileName" /></li>

<li>File: <s:property value="upload" /></li>

</ul>


</body>

</html>

 


 


성공메시지 확인해주세요. 아래와 같이 메시지가 나온다면 지정해두신 업로드 파일에 저장이 되신 걸 확인하실 수 있습니다^^














반응형

'IT > Struts2' 카테고리의 다른 글

스트럿츠2 외국어 지원(국제화)  (0) 2013.08.01
스트럿츠2 파일 업로드  (0) 2013.07.31
유효성 검사  (0) 2013.07.30
스트럿츠2 태그 <iterator>  (0) 2013.07.30
스트럿츠2 태그 <s:sort />  (0) 2013.07.30

loading