스트럿츠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" />
private File upload;
그리고, 살펴볼 부분은
<s:form action="FileUploadAction" method="POST" 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 |