본문 바로가기
Lecture/JSP & Java

[본격 게시판짜기 Part2.10 Model2 MVC패턴] 파일다운로드/삭제 기능추가

by cusmaker 2012. 7. 28.
반응형

2012/06/13 - [Lecture/HTML] - [본격 게시판짜기 Part1.1 - 게시판도 HTML부터] 게시글 리스트

2012/06/13 - [Lecture/HTML] - [본격 게시판짜기 Part1.2 - 게시판도 HTML부터] 글입력폼

2012/06/13 - [Lecture/Javascript-기초] - [본격 게시판짜기 Part1.3 - Dom 맛보기 ] 글입력폼 검사

2012/06/13 - [Lecture/Jsp] - [본격 게시판짜기 Part1.4 - HTML-> JSP] form 파라미터 받기

2012/06/26 - [Lecture/SQL / Oracle] - [본격 게시판짜기 Part1.5 JSP > Oracle] 게시판 DB 테이블 생성

2012/06/26 - [Lecture/Jsp] - [본격 게시판짜기 Part1.6 Oracle > JSP] Database 접속 및 Select

2012/07/05 - [Lecture/Jsp] - [본격 게시판짜기 Part1.7 JSP, SQLDeveloper] 게시글 입력 및 리스트조회기능

2012/07/08 - [Lecture/Jsp] - [본격 게시판짜기 Part1.8 JSP 게시글 조회] 게시글 조회기능 및 게시글 삭제

2012/07/10 - [Lecture/Jsp] - [본격 게시판짜기 Part2.1 Model2 MVC패턴] 뷰(View) 코드 분리

2012/07/10 - [Lecture/Jsp] - [본격 게시판짜기 Part2.2 Model2 MVC패턴] Entity Beans의 사용

2012/07/12 - [Lecture/Jsp] - [본격 게시판짜기 Part2.3 Model2 MVC패턴] Controller구성

2012/07/13 - [Lecture/Jsp] - [본격 게시판짜기 Part2.4 Model2 MVC패턴] Model 구성

2012/07/16 - [Lecture/Mybatis] - [본격 게시판짜기 Part2.5 Model2 MVC패턴] Model 구성2 - i-batis의 사용

2012/07/17 - [Lecture/Mybatis] - [본격 게시판짜기 Part2.6 Model2 MVC패턴] Model 구성2 - i-batis의 사용2

2012/07/21 - [Lecture/Mybatis] - [본격 게시판짜기 Part2.7 Model2 MVC패턴] i-batis의 queryForList 활용 Paging기능구현

2012/07/22 - [Lecture/Jsp] - [본격 게시판짜기 Part2.8 Model2 MVC패턴] count기능추가

2012/07/28 - [Lecture/Jsp] - [본격 게시판짜기 Part2.9 Model2 MVC패턴] 파일업로드 기능추가



안녕하세요 cocy입니다.

이번시간에는 지난시간에 이어 업로드된 파일을 다운로드하는 기능을 추가해 보도록 하겠습니다.


허나 다운로드를 받기위해선 어떻게 해야할까요?

가장 간단한 방법으로는 해당 파일의 경로를 받아서 a태그의 href에 파일이름과 같이 명시하는 방법입니다.

허나, 해당 방법은 서버의 파일경로가 노출되므로 보안상으로도 매우 위험한 방법이며,

기능상으로 볼때도 a태그에 href속성으로 파일을 다운로드하면 페이지가 이동이 되어버리는데 

보통의 사용자경험으로 볼때 이건 좀 아닌것 같습니다.


그러므로 우리는 꼼수를 사용합시다. 페이지의 redirecting 없이 파일을 다운로드 하기위한 

iframe 태그입니다. iframe태그는 페이지속에 또다른 페이지를 표시하기위한 태그라고 이해하시면 되겠습니다.

<iframe id="ifrm_filedown"  style="position:absolute; z-index:1;visibility : hidden;"></iframe>  

눈에 보이지 않도록 css속성을 주었기때문에 body태그안에 아무데나 추가해줍시다. 

그리고나서 해당 iframe을 사용하여 파일을 다운로드하기위해,

파일이름을 표시하는 부분에 a태그로 감싸고 href속성값은 #으로, onclick속성을 붙이고 자바스크립트함수를 연결합시다.

자바스크립트이름은 onDownload로 하고 파라미터는 파일의 이름을 받겠습니다.

이 함수에서는 iframe의 주소를 download.do로 지정하여 앞으로 만들 DownloadAction을 실행합니다.

수정된 소스 전문입니다.



수정하셨으면 이제 src의 com.board.properties패키지안에 Command.properties파일에 download.do명령어를 식별하기위해 

/download.do=com.board.action.DownloadAction 을 추가하고 

com.board.action 패키지에 DownloadAction.java를 추가합시다.

그림 1. download 액션 추가


그럼 내용을 채워봅시다.

내용으로 들어가야할 기능은 대략적으로 다음과 같습니다.

파일이름을 받아서,

실제 파일이 들어있는 경로에 설정한 upload폴더와 파일이름을 붙여서,

해당 스트링에서 파일을 가져옵니다.

파일이 존재하지않으면 에러처리를 합니다.


간단히 설명드렸는데요 소스를 보시겠습니다.



소스를 한번 쭉 훑어보도록 하겠습니다.

일단 먼저 idx를 넘겨받아 해당 게시글을 가져와 Board 객체에 셋팅합니다.

여기서 사용되는 Dao의 메서드는 getArticle인데요, 이미 content에서 구현한 메서드이기때문에 재사용합시다.


그리고나서 파일이름을 받아오고 업로드폴더의 경로와 해당 파일이름을 합친후,

해당경로로부터 파일을 생성합니다.

이후 파일의 사이즈를 조사하고, content타입과 해더를 셋팅하여 파일을 출력합니다.


만약 파일이 존재하지않거나 에러가 날경우에는 에러를 콘솔에 출력합니다.

마지막으로 리턴은 페이지가 별도로 필요하지 않기때문에 null을 반환합니다.


그림2. 파일 다운로드 기능 추가완료

그 다음은 게시글 삭제부분에서 게시글이 삭제될때 파일도 삭제되게끔 코드를 추가해야합니다.

DeleteAction.java에 다음의 내용을 추가합니다.




이상으로 Model2 MVC 게시판이 끝났습니다.

아직 부족한게 많지만 남은 포스팅에서 보완하도록 하겠습니다.

현재까지 계획한 내용의 2/3이 완료하였는데, 남은내용을 잠시 설명드리려합니다.


이제 파트3에서 시작할 내용은

RIA로 가는 첫걸음, Ajax 기술들의 사용과,

jsp에서 각광받고있는 프레임워크인 Spring 프레임워크의 도입

이 두가지가 되겠습니다.

자세한 설명은 다음 포스팅에서 진행하도록 하겠습니다.

수고하셨습니다.


다음장으로 >> http://cusmaker.tistory.com/114