티스토리 뷰
728x90
대충 이런 서식(write.jsp)으로 만들어서 파일 업로드를 해보려고 한다
<s:form name="frm" method="post" action="write" enctype="multipart/form-data">
<table border="1" width="300">
<tr>
<td>글쓴이</td>
<td>
<s:property value="%{#session.id}" />
</td>
</tr>
<tr>
<td>제목</td>
<td><input type="text" name="title"></td>
</tr>
<tr>
<td colspan="2" align="center">본문</td>
</tr>
<tr>
<td colspan="2"><pre><textarea name="content" cols="50" rows="10"></textarea></pre></td>
</tr>
<tr>
<td width="100">비밀번호</td>
<td><input type="password" name="password"></td>
</tr>
<tr>
<td width="100">파일첨부</td>
<td><s:file name="upload" /></td>
</tr>
<tr>
<td colspan="2" align="center" height="30">
<input type="button" value="글쓰기" onClick="doWrite()" />
<input type="button" value="글쓰기 취소" onClick="doWriteCancel()" />
<input type="button" value="리스트 보기" onClick="backToList()" />
<input type="hidden" name="write" value="true" />
</td>
</tr>
</table>
</s:form>
|
<s:form>, <s:file> 태그를 사용한다
주의할 점은 <s:form>에서 enctype="multipart/form-data" 속성이 반드시 들어가야 한다는 것
그리고 현재 뷰(write.jsp) 다음 실행될 액션 클래스에서 upload라는 이름을 꼭 써줘야 한다는 것 ㅎㅎ
여기서 글쓰기 버튼을 누르면 WriteAction.java로 넘어가도록 설정되어 있다
[WriteAction.java]
위 소스 내용은 FileService라는 클래스를 하나 더 만들어서 넘겨받은 파일명과 경로로 실제 하드에 저장하는 작업을 하고
DB에 연결해서 제목, 본문 등과 함께 파일명을 저장하는 것이다
다 집어치우고 여기서 주의해서 봐줘야 될 부분은 아까 write.jsp에서 파일이 upload라는 이름으로 넘어오면
WriteAction.java에서는 upload 그대로 받는 것이 아니라 uploadFileName이 되어야 한다는 것이다
당연히 Getter / Setter는 만들어줘야 된다
[FileService.java]
주의할 점은 <s:form>에서 enctype="multipart/form-data" 속성이 반드시 들어가야 한다는 것
그리고 현재 뷰(write.jsp) 다음 실행될 액션 클래스에서 upload라는 이름을 꼭 써줘야 한다는 것 ㅎㅎ
여기서 글쓰기 버튼을 누르면 WriteAction.java로 넘어가도록 설정되어 있다
[WriteAction.java]
public class WriteAction extends ActionSupport {
String pageNumber;
String title;
String content;
String password;
String uploadFileName; // 파일 이름
String storePath; // 파일명을 포함한 절대 경로
File upload; // 실제 파일이 세팅
String state;
public String execute() {
uploadLocation = "D:\\UpLoad";
FileService fileService = new FileService();
try {
storePath = fileService.saveFile(upload, uploadLocation, uploadFileName);
} catch (Exception e) {
e.printStackTrace();
}
write();
return SUCCESS;
}
public String write() {
BoardBean boardBean = new BoardBean();
try {
boardBean.setId((String)ActionContext.getContext().getSession().get("id"));
boardBean.setTitle(title);
boardBean.setContent(content);
boardBean.setPassword(password);
boardBean.setFileName(uploadFileName);
e.printStackTrace();
}
MvcProcessor mvcProcessor = MvcProcessor.getInstance();
mvcProcessor.setArticle(boardBean);
return "success";
}
public String writeForm() {
return "write_form";
}
public String getPageNumber() {
return pageNumber;
}
public void setPageNumber(String pageNumber) {
this.pageNumber = pageNumber;
}
public String getWrite() {
return write;
}
public void setWrite(String write) {
this.write = write;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
public String getUploadFileName() {
return uploadFileName;
}
public void setUploadFileName(String uploadFileName) {
this.uploadFileName = uploadFileName;
}
return uploadLocation;
}
public void setUploadLocation(String uploadLocation) {
this.uploadLocation = uploadLocation;
}
public File getUpload() {
return upload;
}
public void setUpload(File upload) {
this.upload = upload;
}
public String getStorePath() {
return storePath;
}
public void setStorePath(String storePath) {
this.storePath = storePath;
}
}
|
위 소스 내용은 FileService라는 클래스를 하나 더 만들어서 넘겨받은 파일명과 경로로 실제 하드에 저장하는 작업을 하고
DB에 연결해서 제목, 본문 등과 함께 파일명을 저장하는 것이다
다 집어치우고 여기서 주의해서 봐줘야 될 부분은 아까 write.jsp에서 파일이 upload라는 이름으로 넘어오면
WriteAction.java에서는 upload 그대로 받는 것이 아니라 uploadFileName이 되어야 한다는 것이다
당연히 Getter / Setter는 만들어줘야 된다
[FileService.java]
public class FileService {
public String saveFile(File upload, String uploadLocation, String uploadFileName) throws Exception {
if(upload == null || upload.getName().equals("") || upload.length() <= 0) {
return null;
}
String storePath = uploadLocation + "\\" + uploadFileName;
FileInputStream inputStream = new FileInputStream(upload);
BufferedInputStream input = new BufferedInputStream(inputStream);
FileOutputStream outputStream = new FileOutputStream(storePath);
BufferedOutputStream output = new BufferedOutputStream(outputStream);
int temp = 0;
while((temp = input.read()) != -1) {
output.write(temp);
}
output.close();
outputStream.close();
input.close();
inputStream.close();
return storePath;
}
}
|
'프로그래밍 > Struts' 카테고리의 다른 글
[Struts2] 스트럿츠2 아키텍처 구조 (0) | 2011.07.27 |
---|---|
[Struts2] 접두어(Method, Action, Redirect, RedirectAction) (3) | 2011.07.26 |
[Struts2] HTTP Status 404 - No result defined for action Struts_MVC.WriteAction and result input (0) | 2011.07.22 |
[Struts2] Form action defaulting to 'action' attribute's literal value 경고 해결법 (0) | 2011.07.21 |
[Struts2] 액션 클래스 간의 데이터 주고 받기 (0) | 2011.07.20 |
TAG
- 동양인
- JavaScript
- MacOS
- 특수문자
- 페이지 이동
- 코멧
- struts
- window
- 테이블
- 오류
- jstl
- 스트럿츠
- 기본
- EL
- 함수
- 안드로이드
- JSP
- 시각 차이
- 구매 가이드
- mvc
- 랜덤
- 여성가족부
- Android
- ibatis
- 파이썬
- 스프링
- 데이터베이스
- 주피터 노트북
- 자바스크립트
- 서양인
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
글 보관함
- Total
- Today
- Yesterday