본문 바로가기

프로그램

[JAVA]Apache 의 commons file 를 이용하여 업로드 구현

반응형


Apache commons file 를 이용하여 업로드 구현

 

기본적인 환경

JDK : 1.7

TOMCAT : 7.0

 

Apache commons file 로 업로드가 구현된 부분이 있어 학습을 위해 예제 샘플을 만들어봄

 

commons-file : http://commons.apache.org/proper/commons-fileupload/

 

톰캣에는 기본적으로 commons file lib가 들어있음



 

그러므로 일단 별도 다운로드는 진행하지 않음

다운로드 받을 경우에는 위의 경로에서 받아야함

 

Commons file을 별도로 구현한다면 commons io 가 같이 있어야함



 

톰캣은 이미 있다고 가정함

 

Servlet3.0 annotation 기능을 사용하였음

 

Upload Servlet 소스


package net.lskworld.servlet;


import java.io.File;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.util.List;


import javax.servlet.ServletException;

import javax.servlet.annotation.WebServlet;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;


import org.apache.logging.log4j.LogManager;

import org.apache.logging.log4j.Logger;

import org.apache.tomcat.util.http.fileupload.FileItem;

import org.apache.tomcat.util.http.fileupload.FileUploadException;

import org.apache.tomcat.util.http.fileupload.disk.DiskFileItemFactory;

import org.apache.tomcat.util.http.fileupload.servlet.ServletFileUpload;




/**

 * Servlet implementation class Upload

 */

@WebServlet("/Upload")

public class Upload extends HttpServlet {

Logger logger = LogManager.getLogger(this.getClass()); 

       

    /**

     * @see HttpServlet#HttpServlet()

     */

    public Upload() {

        super();

        // TODO Auto-generated constructor stub

    }


/**

* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)

*/

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

// TODO Auto-generated method stub

}


/**

* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)

*/

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

// TODO Auto-generated method stub

//dopost로 넘어올 터니 여기에 코딩

DiskFileItemFactory factory = new DiskFileItemFactory();

//기본 경로 지정

String path = "c:\\upload";

//path 에 임시파일이 저장됨

//기본으로는 File repository = (File) servletContext.getAttribute("javax.servlet.context.tempdir") 에서 구해온 곳에 저장됨

File repository = new File(path);

factory.setRepository(repository);

ServletFileUpload upload = new ServletFileUpload(factory);

try {

//parseRequest 하는 순간 upload 폴더에 임시파일들이 쌓임

List<FileItem> items = upload.parseRequest(request);

for(FileItem f : items) {

logger.debug("=====fileItem : \n" + f);

//바로 파일로 저장

File uploadFile = new File(path + "\\" + f.getName());

logger.debug("=====f.getName : " + f.getName());

logger.debug("=====uploadFile : " + (path + "\\" + f.getName()));

if(f.isFormField() == false) { //file 객체 필드

if(f.getName() != null && f.getName().equals("") == false) {

//임시file 삭제는 FileCleaner 를 통해 삭제되는데 

//저장된 java.io.File 객체가 가비지컬렉터 되면 작동한다고 하는 것 같음

f.write(uploadFile);

//스트림 처리

/*

InputStream uploadStream = f.getInputStream();

File uploadFile = new File(path + "\\" + f.getName());

FileOutputStream outputStream = new FileOutputStream(uploadFile);

byte[] buf = new byte[1024];

int len;

while( (len = uploadStream.read(buf)) > 0 ) {

outputStream.write(buf);

}

outputStream.close();

uploadStream.close();

*/

} else { //f.getName() != null && f.getName().equals("") == false

logger.debug("name is null");

}

} else { //일반 필드

logger.debug("파일필드 아님");

}

}

logger.info("=====items : \n" + items);


//성공 메시지

request.setAttribute("logs", "성공하였습니다.");

//처리 완료 후 forward처리

request.getRequestDispatcher("index.jsp").forward(request, response);

} catch (FileUploadException e) {

// TODO Auto-generated catch block

//logger.error(e, e);

e.printStackTrace();

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}


}



 

 

JSP화면



 WAR파일


UploadTest.war