원문 출처 : http://e2xist.tistory.com/233
○ 파일 업로드
1) 기본 설정
- 파일 업로드 컴포넌트 중 현재 가장 인정 받는 cos패키지의 MultipartRequest를 사용하여 파일 업로드 기능을 구현한다.
1. cos파일 다운받기
- http://www.servlets.com>왼쪽메뉴 com.oreilly.sevlte>cos-05Nov2002.zip다운
2. 파일 복사
- cos-05Nov2002.zip>lib>cos.jar 파일을 복사한다.
3. 파일 설치
① 다이나믹웹프로젝트>WEB-INF>lib안에 cos.jar파일을 import받는다.(오른쪽 마우스)
② 톰캣 홈>commons>lib안에 cos.jar파일을 붙여 넣는다.
2) MultipartRequest 생성자
- MultipartRequest의 객체가 생성됨과 동시에 파일 업로드가 이루어 진다.
생성자 | 설명 |
MutipartRequest | 디렉토리를 지정할 수 있으며, 기본적으로 업로드 용량은 1메가로 제한된다 |
MutipartRequest | 파일을 저장할 디렉토리를 지정할 수 있으며, 업로드제한 용량을 설정할 수 있다.(바이트단위). 이때 업로드 제한 용량을 넘어서 업로드를 시도하면 IOException 발생 |
MutipartRequest | 파일을 저장할 디렉토리를 지정할 수 있으며, 업로드제한 용량을 설정할 수 있다.(바이트단위). 이때 업로드 제한 용량을 넘어서 업로드를 시도하면 IOException 발생된다. 또한 중복 파일 처리 인터페이스를 사용할 수 있다. |
MutipartRequest | 파일을 저장할 디렉토리를 지정할 수 있으며, 업로드제한 용량을 설정할 수 있다.(바이트단위). 이때 업로드 제한 용량을 넘어서 업로드를 시도하면 IOException 발생된다. 또한 국제화 지원을 위한 인코딩 방식을 지정할 수 있다. |
MutipartRequest | 파일을 저장할 디렉토리를 지정할 수 있으며, 업로드제한 용량을 설정할 수 있다.(바이트단위). 이때 업로드 제한 용량을 넘어서 업로드를 시도하면 IOException 발생된다. 또한 국제화 지원을 위한 인코딩 방식을 지정할 수 있으며, 중복 파일 처리 인터페이스를사용할 수 있다. |
MutipartRequest | 파일을 저장할 디렉토리를 지정할 수 있으며, 국제화지원을 위한 인코딩 방식을 지정할 수 있다. |
3) MultipartRequest 메소드
반환타입 | 설명 |
Enumeration | getFileNames() 업로드 된 파일들에 대한 이름을 Enumeration객체에 String형태로 담아 반환한다. 이때의 파일 이름이란 클라이언트 사용자에 의해서 선택된 파일의 이름이 아니라, 개발자가 form의 file타임에 name속성으로 설정한 이름을 말한다. 만약 업로드 된 파일이 없는 경우엔 비어있는 Enumeration객체를 반환한다. |
String | getContentType(String name) 업로드 된 파일의 컨텐트 타입을 얻어올 수 있다. 이 정보는 브라우저로부터 제공받는 정보이다. 이때 업로드 된 파일이 없는 경우에는 null을 반환한다. |
File | getFile(String name) 업로드 된 파일의 File객체를 얻는다. 우리는 이 객체로부터 파일사이즈 등의 정보를 얻어낼 수 있다. 이때 업로드 된 파일이 없는 경우에는 null을 반환한다. |
String | getFilesystemName(String name) 시스템의 파일 이름을 반환한다. 이때 업로드 된 파일이 없는 경우에는 null을 반환한다. |
String | getOriginalFimeName(String name) 중복 파일 처리 인터페이스에 의해 변환되기 이전의 파일 이름을 반환한다. 이때업로드 된 파일이 없는 경우에는 null을 반환한다. |
String | getParameter(String name) 지정한 파라미터의 값을 반환한다. 이때 전송된 값이 없을 경우에는 null을 반환한다. |
Enumeration | getParameternames() 폼을 통해 전송된 파라미터들의 이름을 Enumeration객체에 String 형태로 담아 반환한다. 전송된 파라미터가 없을 경우엔 비어있는 Enumeration객체를 반환한다 |
String[] | getparameterValues(String name) 동일한 파라미터 이름으로 전송된 값들을 String배열로 반환한다. 이때 전송된파라미터가 없을 경우엔 null을 반환하게 된다. 동일한 파라미터가 단 하나만 존재하는 경우에는 하나의 요소를 지닌 배열을 반환하게 된다. |
4) 파일 업로드
1. 저장할 폴더
- 파일이 저장될 폴더를 미리 만들어 놓아야 파일이 만들어진 폴더에 저장된다. eclipse에서 WebContent에 폴더 생성
2. 파일 업로드 view
- 파일 업로드를 사용하기 위해서 form은 항상 post방식이어야 하며 enctype을 지정해 주어야 한다.
<form name="formUpload" method="post" enctype="multipart/form-data" action="upload_cos_ok.jsp"> <input type="file" name="upfile" onkeydown="event.returnValue=false;"> <!-- onkeydown은 키보드가 입력되었을 때 발생하는 이벤트 --> <textarea name="contents" rows="5" cols="55"></textarea> </form> |
3. 파일 업로드 ok view
- 파일 업로드 객체를 생성과 정보를 보려면 import 해야 한다.
<%@ page language="java" contentType="text/html; charset=EUC-KR" pageEncoding="EUC-KR"%> <%@ page import="java.io.File, java.io.IOException, com.oreilly.servlet.MultipartRequest, com.oreilly.servlet.multipart.DefaultFileRenamePolicy"%>
<html> <body> <% String encType="euc-kr"; //인코딩 타입 int sizeLimit=1*1024*1024; //1메가
/* WebContent에 미리 만들어 놓은 upload폴더의 절대경로 구하는 방법1 */ String saveFolder=" Fileupload/upload"; //파일이 저장될 폴더명 String savePath1=""; // 웹 어플리케이션의 절대 경로가 저장될 객체 ServletContext context = getServletContext();
/* WebContent에 미리 만들어 놓은 upload폴더의 절대경로 구하는 방법2 */ String savePath2=application.getRealPath("Fileupload/upload");
/* WebContent에 미리 만들어 놓은 upload폴더의 절대경로 구하는 방법3 */ String savePath3=request.getRealPath("Fileupload/upload");
try{ /* 전송을 담당할 컴포넌트를 생성하고 파일을 전송(전송할 파일명을 가지고 있는 객체, 서버상의 절대경로, 최대 업로드될 파일 크기, 인코딩, 중복파일처리)*/ MultipartRequest multi=new MultipartRequest(request, savePath1, sizeLimit, "euc-kr" ,new DefaultFileRenamePolicy());
String originalFileName = multi.getOriginalFileName("upfile"); // 중복 처리 전의 파일 이름 ()안은 input업로드 파일의 이름
//시스템의 파일 이름 반환(업로드 파일 없으면 null반환) String fileName = multi.getFilesystemName("upfile");
/* 파일이 업로드 되었는지 체크 */ if(fileName==null){ %> <h2>파일이 업로드 되지 않았습니다.</h2><br> <a href = "javascript <% }else{ //파일이 업로드 되었을 때 //파일 객체 얻기 File file1 = multi.getFile("upfile"); String contents = multi.getParameter("contents"); // 파라미터 객체 %> <h2>파일 업로드가 정상적으로 완료되었습니다!!</h2> 저장된 파일 이름 : <%=fileName%><br> 변경되기 이전의 파일 이름 : <%=originalFileName%><br> 설명 : <%=contents%><br> 사이즈 : <%=file1.length()%>Byte<br> ContentType : <%=multi.getContentType("upfile")%><br> <% } }catch(IOException e){ out.print("<h2>IOException이 발생했습니다 </h2> <br> <pre>" + e.getMessage() + "</pre>"); } %> </body> </html> |
4. 파일 다운
- 파일을 다운 받을 때는 파일의 경로에 링크를 걸어주면 다운 받을 수 있다.
<a href="upload/<%=fileName%>"><%=fileName%></a> |
* * 주의점 * * - 폴더 계층 구조 : BoardTest>Fileupload>upload - BoardTest는 다이나믹웹프로젝트 명, Fileupload는 web-content안의 폴더 명(파일 업로드하는 jsp파일은 여기에 있음), upload는 파일이 저장되는 폴더 명 - 현재 경로 : http://localhost:8090/BoardTest/Fileupload/upload_cos_ok.jsp 링크를 걸 때 현재 경로에서 upload폴더 안으로 들어갈 수 있도록 'upload/'를 써주면 다운 받을 수 있다. |
'IT Data > #Java' 카테고리의 다른 글
SQL Bean.java 의 기본 메소드 형태 (0) | 2014.10.17 |
---|---|
[JAVA 고정된 IP주소 가져오기] (0) | 2013.10.21 |
java 초성검색 메소드 (0) | 2013.10.14 |
[JavaScript] 정규표현식 유효성검사 (IP주소:포트) (1) | 2013.08.28 |
[Java] Properties, Timer, XML, Buffer (0) | 2013.08.20 |