jsp SmartUpload

강좌 :

http://www.aboutjsp.com/lec/smartupload.jsp


----------------------------------------
* 강좌를 시작하기전에.....

jspSmartUpload는 몇가지 문제점이 지적되고 있어 궁극적으로는 사용하지 말것을 권장하고 있습니다. 따라서 본강좌를 참고여 구현된 사이트에서 나타나는 문제점에 대해서 필자는 책임지지 않습니다.
자세한 내용은 아래의 페이지에서 살펴 보시기 바랍니다.

http://www.javaservice.net/~java/bbs/read.cgi?m=devtip&b=servlet&c=r_p&n=995622233

JSP에서 파일 업로드는 구현하는 대단히 어려운 부분중에 하나 입니다. 그러한 이유로 파일 업로드에 관한 패키지가 많이 배포된 상태이고.. jspSmartUpload는 그중에서 가장 유명한패키지가 아닌가.. 합니다. 어째든 이러한 패키지를 이용하면 그.. 어렵던 파일의 업로드가.. 무지 쉽게 구현됩니다.
jspSmartUpload는 다음의 사이트에서 다운 받으실수 있으며, 또한 더 자세한 설명을 보실수 있을 겁니다.

http://www.jspsmart.com

또한 저의 홈페이지(http://aboutjsp.com)의 자료실에도 업로드를 해 놓았으니 필요 하신 분들은 가셔셔 다운받으시기 바랍니다.


* jspSmartUpload 패키지 설치하기

자~ 사용을 하려면 먼저 설치부터 하셔야 겠지요? 다운 받으신 파일의 압축을 풀면 여러 예제파일이 보이고 WEB-INF 라는 디렉토리가 보일겁니다. 그밑에 classes 가 있구요.. classes 디렉토리밑에 com 이라는 디렉토리가 보일겁니다. (jspSmartUpload/WEB-INF/classes/com/.......) "com" 밑으로 쭉~쭉~ 내려오면 jspSmartUpload 에서 지원하는 클래스 들을 확인 하실수 있을 겁니다.
해당 클래스를 사용하기 위해서는 클래스가 있는 디렉토리가 CLASSPATH에 잡혀 있어야 합니다. 적절한 디렉토리에 저장을하시고 CLASSPATH로 잡아 주시면 설치는 끝이 나게 됩니다. CLASSPATH 에 대해서 잘 모르시는 분들은 jspSmartUpload의 WEB-INF/classes 이하의 디렉토리를 사용하는 웹어플리케이션의 루트아래 WEB-INF/classes에 복사 합니다. 혹은 같이 배포된 jar파일을 WEB-INF/lib에 복사해도 됩니다.


* 업로드를 위한 환경 구축하기

환경 구축은 별로 어려울게 없죠. 단 한가지만 주의 하면 되는 데 파일이 업로드될 디렉토리의 퍼미션 문제입니다. 일반적으로 파일이 업로드가 되기 위해서는 other 에 w 권한이 주어지면 되는데, 즉 upload라는 디렉토리 업로드를 하려고 한다면 upload 디렉토리의 권한을 777 등으로 변경하여 주면 된다. 이에대한 자세한 설명은 유닉스(리눅스)에서의 퍼미션 설정에대한 강좌를 참고하기 바랍니다. ( http://kldp.org 를 참고 하면 될듯합니다...)
윈도우 환경에서는 퍼미션에 대해 달리 설정하실 내용은 없습니다.


* 업로드를 하자~!!

* jspSmartUpload 의 API 문서는 다운받은 파일의 압축을 풀면 같이 제공되어 있는데, 제 홈페이지 에 올려둔 것을 참고 하셔도 됩니다.

http://aboutjsp.com/docs/jspsmartupload/index.html

다음에서 설명하는 내용외에 많은 유용한 메소들이 많이 있으니 문서를 참고 하셔서 사용하시기 바랍니다.

jspSmartUpload를 사용하기 위해서는 먼저 위에서 설치한 패키지 "com.jspsmart.upload"를 import 해야 합니다. 그리고 다음으로 <jsp:useBean> 액션구문으로 SmartUpload 클래스의 객체를 정의 하고 JSP 스크립트 본문에서 객체를 초기화 한뒤 initialize(pageContext) 메소드를 호출합니다.

<%@ page contentType="text/html;charset=UTF-8" %>
<%@ page language="java" import="com.jspsmart.upload.*" %>
<jsp:useBean id="smart" scope="page" class="com.jspsmart.upload.SmartUpload" />

<%
smart.initialize(pageContext);
%>

그 다음으로 upload() 메소드를 사용해서 파일을 업로드를 하는데, 이메소드는 단지 파일을 업로드 하는것이지 아직 저장은 이루어 지지 않은 것입니다. 즉, 메모리 상에만 올라가 있는 상태가 됩니다. (jspSmartUpload 의 단점이 바로 이부분입니다.)

<% smart.upload(); %>

자.. 업로드가 이루어 졌으면 이제 저장을 해야 겠지요.. 위에 "업로드를 위한 환경 구축하기"에서 설명한 바와 같이 저장은 쓰기 퍼미션이 주어져 있어야합니다. /upload 라는 디렉토가 이렇게 설정이 되어 있다는 가정하에 설명 하도록 하겠습니다.

<% smart.save("/upload"); %>

자.. 위와 같이 하면 업로드된 파일이 /upload 디렉토리에 저장되게 됩니다.

다음은 업로드 예제입니다.

up.html
<html>
	<head>
		<title>파일 업로드 예제</title>
	</head>

	<body>
		<form method="post" action="up.jsp" enctype="multipart/form-data">
		<input type="file" name="file"> <BR>
		<input type="submit" value="저장">
		</form>
	</body>
</html>

				
위에 굵게 표시된 부분이 특히 중요한데, 반드시 method="post" 이어야 하며, enctype은 multipart/form-data 이어야 합니다.. 저는 저기 스펠을 하나 틀려서 무쟈게 고생했던 기억이 있습니다.. ㅠ.ㅠ
자 그럼.. 완성된 up.jsp 파일의 내용을 보시겠습니다.
up.jsp
<%@ page contentType="text/html;charset=UTF-8" %>
<%@ page language="java" import="com.jspsmart.upload.*" %>
<jsp:useBean id="smart" scope="page" class="com.jspsmart.upload.SmartUpload" />

<%
  smart.initialize(pageContext);
  smart.upload();

  try{
       smart.save("/upload");
  } catch(Exception e){
       out.print(e.toString());
  }
%>
				
아주 간단하게 구현된 예제 입니다. 파일 업로드가 끝나면 단순히 비어 있는 페이지가 출력이 될것입니다.


* 좀더 확장된 업로드

위의 예제만 활용 하여도 간단하게 업로드를 구현할수 있지만 jspSmartUpload 에서 좀더 다양한 기능을 위해서 몇가지 메소드들에 대해서 알아 보도록 하겠습니다.
jspSmartUpload 는 총 4개의 클래스로 구성되어 있는데 <jsp:useBean>으로 등록한 SmartUpload 그리고 Files, File, Request 가 바로 그것들이죠.
html의 폼에서 jsp로 넘길때 여러개의 파일을 보낼수 있는데 그러한 여러개의 파일들을 묶음으로 관리 할수 있도록 Files 클래스가 제공되며, 각각의 파일을 다룰수 있도록 File 클래스가 제공됩니다.
예제를 하나 보며 설명하도록 하겠습니다.

01: <%@ page contentType="text/html;charset=UTF-8" %>
02: <%@ page language="java" import="com.jspsmart.upload.*" %>
03: <jsp:useBean id="smart" scope="page" class="com.jspsmart.upload.SmartUpload" />
04:
05: <%
06:    smart.initialize(pageContext);
07:    smart.upload();
08:
09:    int count=smart.save("/upload");
10:
11:    com.jspsmart.upload.File upfile=smart.getFiles().getFile(0);
12:
13:    upfile.saveAs("/upload/"+"새로운이름");
14:
15:    out.println(count+"개의 파일이 업로드 되었습니다.");   
16:
17:    out.println("업로드된 파일의 이름은 " + upfile.getFileName() + "입니다.");
18:
19:    out.println("업로드된 파일의 사이즈는 "+ upfile.getSize() + "Byte 입니다.");
20:
21: %>

				
우선 9 라인을 보면 save() 메소드는 업로드된 파일을 갯수를 저장합니다. 따라서 15 라인과 같이 출력을 할수 있게 됩니다. 다음으로 11라인을 보면 File 객체를 생성하였고, 13 라인에서는 업로드된 파일을 "새로운이름" 이라는 파일로 저장합니다. 여기에서와 같이 saveAs()메소드를 이용하면 업로드된 파일을 원하는 이름으로 바꾸어서 업로드가 가능해 집니다. 또한 17, 19 라인 에서는 각각 파일의 이름과, 사이즈를 나타내는데, 파일의 이름은 업로드시 받아온 원래의 파일 이름이 리턴 됩니다. 사이즈의 경우에는 Byte 단위로 숫자만이 리턴 됩니다.


* Request 객체에 대하여...

필자가 처음 위에서 jspSmartUpload에 포함되어 있는 객체들에대해서 설명을 하면서 하나 빼먹은 것이 있습니다. 무었이냐 하면 바로.. "Request" 이었습니다. (기억하시죠? SmartUpload, Files, File, Request 이렇게 있었던거..)
위에서 언급했듯이 html문서에서 jsp로 '파일'을 넘길때 enctype="mulipart/form-data" 를 추가 했었습니다. 그런데 이경우 데이터는 제대로 전송이 이루어 지지만, 그외에 폼에 대해서는 "null" 로 표시가 됩니다. 즉, 다른 폼의 데이터(text등의..)는 전혀 받아 올수없었다는 것이죠.
이러한 이유로 jspSmartUpload에서는 Request 클래스를 지원해줍니다. 그럼 사용법에 대해서 알아 볼까요~ ♪

01: <%@ page contentType="text/html;charset=UTF-8" %>
02: <%@ page language="java" import="com.jspsmart.upload.*" %>
03: <jsp:useBean id="smart" scope="page" class="com.jspsmart.upload.SmartUpload" />
04:
05: <%
06:    smart.initialize(pageContext);
07:    smart.upload();
08:
09:    int count=smart.save("/upload");
10:
11:    com.jspsmart.upload.File upfile=smart.getFiles().getFile(0);
12:
13:    upfile.saveAs("/upload/"+"새로운이름");
14:
15:    out.println(count+"개의 파일이 업로드 되었습니다.");   
16:
17:    out.println("업로드된 파일의 이름은 " + upfile.getFileName() + "입니다.");
18:
19:    out.println("업로드된 파일의 사이즈는 "+ upfile.getSize() + "Byte 입니다.");
20:
21:   String name=smart.getRequest().getParameter("name");
22:  
23:  out.println("업로드한 사람 이름 : " + name);
24:
25:  %>
				
2개의 라인이 추가 되었습니다. 21번라인을 보면 getRequest()라는 메소드를 사용하였는데, 이 메소드는 Request 객체를 리턴 해 줍니다. 그리고 Request객체의 getParameter()메소드를 사용하였는데 이것은 일반적인 request.getParameter() 메소드와 사용법이 동일합니다.

이상으로 강좌를 마칩니다. 위의 예제 외에도 유용한 메소드 들이 많이 있습니다.. 위에서 언급한 API문서를 참고 하시면서 보다 완벽한 프로그램을 구현해 보시기 바랍니다 ^-^ 아.. 제공되는 패키지에 좋은 예제들도 같이 들어 있으니 참고 하시면 많은 도움이 되리라 생각 되는군요.. 그럼.. 전 이만 물러 갑니다~~~ 총~총~총~



* 관련사이트
http://www.jspsmart.com
   JspSmart.com
http://okjsp.pe.kr/lecture/lec05/jspsmart01.htm
   OK JSP 강좌 > JspSmartUpload 설치
http://aboutjsp.com/docs/jspsmartupload/index.html
   JspSmartUpload API 문서

저자 : 이선재(hsboy)
http://www.aboutjsp.com
다른곳에 올리실 때는 반드시 출처를 명시해 주시기 바라며 되도록 이면 링크를 걸어 주시기 바랍니다

이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받고 있습니다.

이 포스팅은 제휴마케팅이 적용되어 작성자에게 일정액의 커미션이 제공될수 있습니다.

이 글을 공유하기

댓글

Designed by JB FACTORY

"웨딩박람회 일정 스드메 견적 웨딩플랜닷컴 "

주부알바 재택부업 앙팡펫파트너스

서민안심전환대출 ㅣ정부지원대출ㅣ채무통합대환대출