note

JSP 파일 업로드 (Servlets.com) cos라이브러리 사용 본문

JSP/기본

JSP 파일 업로드 (Servlets.com) cos라이브러리 사용

투한 2012. 2. 13. 16:01




http://www.servlets.com/





com.oreilly.servlet 클릭

 


스크롤 밑으로 내리면 version이 있음 다운

 

받아서 압축해제

 
doc -> index.html
에 Api가 있음



src에는 원본 소스가 있으므로
공부를 원하는 분은 읽어보길 바랍니다.



라이센스 내용

Copyright (C) 2001-2009 by Jason Hunter, jhunter@servlets.com.
All rights reserved. 

The source code, object code, and documentation in the com.oreilly.servlet
package is copyright and owned by Jason Hunter. 


ON-SITE USE RIGHTS

Permission is granted to use the com.oreilly.servlet.* packages in the
development of any *non-commercial* project. For this use you are granted
a non-exclusive, non-transferable limited license at no cost.

For a *commercial* project, permission is granted to use the
com.oreilly.servlet.* packages provided that every person on the development
team for that project owns a copy of the book Java Servlet Programming
(O'Reilly) in its most recent edition. The most recent edition is currently
the 2nd Edition, available in association with Amazon.com at
http://www.amazon.com/exec/obidos/ASIN/0596000405/jasonhunter. 

Other (sometimes cheaper) license terms are available upon request; please
write to jhunter@servlets.com for more information. 


REDISTRIBUTION RIGHTS

Commercial redistribution rights of the com.oreilly.servlet.* packages are
available by writing jhunter@servlets.com.

Non-commercial redistribution is permitted provided that:

1. You redistribute the package in object code form only (as Java .class files
or a .jar file containing the .class files) and only as part of a product that
uses the classes as part of its primary functionality. 

2. The product containing the package is non-commercial in nature.

3. The public interface to the classes in the package, and the public
interface to any classes with similar functionality, is hidden from end users
when engaged in normal use of the product.

4. The distribution is not part of a software development kit, operating
system, other library, or a development tool without written permission from
the copyright holder.

5. The distribution includes copyright notice as follows: "The source code,
object code, and documentation in the com.oreilly.servlet package is copyright
and owned by Jason Hunter." in the documentation and/or other materials
provided with the distribution.

6. You reproduce the above copyright notice, this list of conditions, and the
following disclaimer in the documentation and/or other materials provided with
the distribution.  

7. Licensor retains title to and ownership of the Software and all
enhancements, modifications, and updates to the Software.

Note that the com.oreilly.servlet package is provided "as is" and the author
will not be liable for any damages suffered as a result of your use.
Furthermore, you understand the package comes without any guarantee of
technical support. 

You can always find the latest version of the com.oreilly.servlet package at
http://www.servlets.com. 


THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.

Thanks,

Jason Hunter
jhunter AT servlets.com




라이센스를 잘 읽어서 저작권에 위배되는 행동은 하지 않길 바랍니다



 lib에 있는 내용을 프로젝트 WebContent -> WEB-INF -> lib에 위치




upload 폴더 생성(WebContent -> upload)




사용 전제 조건


Form -> Method="POST"방식

input type="file"

enctype="multipart/form-data"  


 















끝....


upload에 파일이 위치해 있지 않는데
이 공간은 코딩만 하는 공간이므로
서버에 올려지는 경로에는 올려져 있다


ps 같은 파일을 두번 올릴경우



뒤에 숫자 1이 붙는다

게시판에 누군가가 같은 파일을 올려도 다른 이름으로 저장되는 기능이 있기 때문에
게시판,방명록,갤러리등 게시판 목적으로 첨부파일을 올리는 기능을 충분히 수행할 수 있다고 생각한다





다중 업로드 지원부분

fileSelect.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!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=UTF-8">
<title>파일 업로드 예제</title>
</head>
<body>
<form name="fileForm" method="post" enctype="multipart/form-data" action="fileUpload.jsp">
작성자 : <input type="text" name="user"><br/>
제 목: <input type="text" name="title"><br/>
파일명 : <input type="file" name="uploadFile"><br/>
파일명2 : <input type="file" name="uploadFile2"><br/>
<input type="submit" value="파일 올리기"><br/>
</form>
</body>
</html>





다중 업로드도 됨

 






주 의 사 항
파일이 들어가 있지 않으면 request.getParameter()로 빼낼 수 있는데
파일이 첨부가 되면 작동이 되지 않는다 
그래서
multi = new MultipartRequest(request,realFolder,maxSize,encType,new DefaultFileRenamePolicy());
객체를 생성한뒤()
multi.getParameter(); 
로 form으로 보내진 값을 얻을 수 있다 (35 Line)




 


 



fileSelect.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!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=UTF-8">
<title>파일 업로드 예제</title>
</head>
<body>
<form name="fileForm" method="post" enctype="multipart/form-data" action="fileUpload.jsp">
작성자 : <input type="text" name="user"><br/>
제 목: <input type="text" name="title"><br/>
파일명 : <input type="file" name="uploadFile"><br/>
<input type="submit" value="파일 올리기"><br/>
</form>
</body>
</html>


fileUpload.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="com.oreilly.servlet.MultipartRequest" %>
<%@ page import="com.oreilly.servlet.multipart.DefaultFileRenamePolicy" %>
<%@ page import="java.util.*" %>
<%@ page import="java.io.*" %>

<%
	String realFolder=""; //웹 어플리케이션상의 절대 경로
	
	//파일이 업로드 되는 폴더를 지정한다.
	String saveFolder = "upload";
	String encType="UTF-8"; //엔코딩 타입
	int maxSize = 5*1024*1024;//최대 업로드될 파일크기 5MB
	
	ServletContext context = getServletContext();
	//현재 jsp 페이지의 웹 어플리케이션 상의 절대 경로를 구한다
	realFolder = context.getRealPath(saveFolder);
	out.println("the realpath is : "+realFolder+"<br>");
	
	try{
		MultipartRequest multi = null;
		
		//전송을 담당할 콤포넌트를 생성하고 파일을 전송한다.
		//전송할 파일명을 가지고 있는 객체, 서버상의 절대경로 , 최대 업로드될 파일 크기
		multi = new MultipartRequest(request,realFolder,maxSize,encType,new DefaultFileRenamePolicy());
		
		//Form의 피라미터 목록을 가져 온다
		Enumeration params = multi.getParameterNames();
		
		//파라미터를 출력한다
		while(params.hasMoreElements()){
			//전송되는 파라미터 이름
			String name = (String)params.nextElement();
			String value = multi.getParameter(name);
			out.println(name+" = " + value +"<br>");
		}
		out.println("=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-<br>");
		//전송한 파일 정보를 가져와 출력한다.
		Enumeration files = multi.getFileNames();
		
		//파일 정보가 있다면
		while(files.hasMoreElements()){
			//input 태그 속성이 file인 태그의 name 속성값 : 파라미터 이름
			String name= (String)files.nextElement();
		
		//서버에 저장된 파일 이름
		String filename = multi.getFilesystemName(name);
		
		//전송전 원래 파일 이름
		String original = multi.getOriginalFileName(name);
		
		//전송된 파일의 내용 타입
		String type= multi.getContentType(name);
		
		//전송된 파일 속성이 file인 태그의 anme 속성값을 이용해 파일 객체 생성
		File file = multi.getFile(name);
		
		out.println("파라 미터 이름 : "+name+"<br/>");
		out.println("실제 파일 이름 : "+original+"<br/>");
		out.println("저장된 파일 이름 :"+filename+"<br/>");
		out.println("파일 타입 : "+type+"<br/>");
		
		if(file!=null){
			out.println("크기 : "+file.length());
			out.println("<br>");
		}
		}
	}catch(IOException ioe){
	System.out.println(ioe);
	}catch(Exception ex){
	System.out.println(ex);
	}
%>


'JSP > 기본' 카테고리의 다른 글

properties 국제화(에디터)  (0) 2012.02.14
간단한 표현언어(EL) 예제  (0) 2012.02.14
방명록 MODEL1 방식 ORACLE  (0) 2012.02.13
JSP MODEL1 방식  (0) 2012.02.10
PreparedStatement Statement 의 차이점(SELECT),(INSERT)  (0) 2012.02.09