티스토리 뷰

공장 (factory)/- Programming..

[JSP] MultipartRequest를 이용한 파일 업로드

공부하는 나부랭이, 무중력고기 2013.09.17 16:15

   웹페이지에서 MultipartRequest객체를 이용한 파일업로드 방법을 소개한다.


   다른 방법들도 뒤적뒤적 해봤지만, MultipartRequest를 이용한 방법이 제일 쉬웠다.




   먼저 MultipartRequest를 이용하기 위해선, 라이브러리 파일을 다운 받아야 한다.


   다운로드☞ http://www.servlets.com/cos/


cos-26Dec2008.zip




   cos-26Dec2008.zip 파일을 다운로드 받아서 압축을 풀면,


   lib 폴더에 cos.jar파일이 보일 것이다. cos.jar 파일을,,



   WEB-INF > lib 폴더 안에 집어넣자.




   * View (jsp 페이지)



<회원가입 양식>
이름:
별명:
사진:


   위와 같이 코딩하면 아래와 같이 입력 폼이 보일 것이다.




   데이터 입력 후, 전송을 클릭했을 시 수행할 Controller나 Action에 넣을 자바 코드는 아래와 같다.

   (action 값을 다른 jsp페이지로 해놓고, 그 jsp 쪽에서 자바 코드를 수행함과 동시에 return page도 같이 겸하도록 해도 상관은 없지만, 그렇게 하면 코드가 더러워지고 유지보수가 까다로워진다)



   * Java Code

// 파일이 저장될 서버의 경로. 되도록이면 getRealPath를 이용하자.
// String savePath = "D:/Projects/workspace/projectName/WebContent/folderName";
String savePath = request.getServletContext().getRealPath("folderName");

// 파일 크기 15MB로 제한
int sizeLimit = 1024*1024*15;

//  ↓ request 객체,               ↓ 저장될 서버 경로,       ↓ 파일 최대 크기,    ↓ 인코딩 방식,       ↓ 같은 이름의 파일명 방지 처리
// (HttpServletRequest request, String saveDirectory, int maxPostSize, String encoding, FileRenamePolicy policy)
// 아래와 같이 MultipartRequest를 생성만 해주면 파일이 업로드 된다.(파일 자체의 업로드 완료)
MultipartRequest multi = new MultipartRequest(request, savePath, sizeLimit, "utf-8", new DefaultFileRenamePolicy());


// --------------------------아래는 전송 받은 데이터들을 DB테이블에 저장시키기 위한 작업들이다.--------------------------
// 테이블 설계, 쿼리문, DTO, DAO, Service.. 등은 만들어져 있다고 가정한다.



// MultipartRequest로 전송받은 데이터를 불러온다.
// enctype을 "multipart/form-data"로 선언하고 submit한 데이터들은 request객체가 아닌 MultipartRequest객체로 불러와야 한다.
String m_name = multi.getParameter("m_name");
String m_nickname = multi.getParameter("m_nickname");

// 전송받은 데이터가 파일일 경우 getFilesystemName()으로 파일 이름을 받아올 수 있다. 
String fileName = multi.getFilesystemName("m_file");

// 업로드한 파일의 전체 경로를 DB에 저장하기 위함
String m_fileFullPath = savePath + "/" + fileName;


// 데이터들을 담을 그릇인 DTO(혹은 Bean) 객체를 생성 후, 데이터들을 set해준다. 
MemberDTO memberDTO = new MemberDTO();

memberDTO.setM_name(m_name);
memberDTO.setM_nickname(m_nickname);
memberDTO.setM_fileFullPath(m_fileFullPath);
memberDTO.setM_fileName(fileName);

// Service 객체 생성.(서비스가 없고 DAO에서 직접 처리한다면 DAO 객체 생성) 
MemberService service = MemberService.getInstance();

// 서비스에서 만들어놓은 insert 수행 메서드 사용. set으로 담아줬던 DTO를 넘겨서 insert 수행.
service.insertMember(memberDTO);

// 검증 처리는 생략했다.
// 검증은 Controller 혹은 Action에서 해도 되고, 입력 폼이 있는 jsp에서 해도 된다. 둘다 해도 되고..
// 그런 건 각자 알아서.

// 만약 return할 페이지에 방금 전송한 데이터들을 출력하고 싶다면 DTO를 속성에 담아준다.
request.setAttribute("memberDTO", memberDTO);

// ↓ 모든 것이 성공적으로 수행되었을 경우 return 될 page
return "blabla/blabla.jsp";




   어떤가. 쉽지 아니한가? 이보다 더 친절할 수는 없다.


   MultipartRequest를 이용할 경우, 파일 업로드를 수행하는 것은 사실상 단 한 줄 밖엔 되지 않기 때문에 굉장히 쉽게 파일 업로드를 구현할 수 있다.




↓ MultipartRequest 객체에 대한 자세한 내용을 보고 싶다면 아래의 API를 참고할 것

http://www.servlets.com/cos/javadoc/com/oreilly/servlet/MultipartRequest.html



저작자 표시 비영리 변경 금지
신고
댓글
댓글쓰기 폼
Total
891,336
Today
52
Yesterday
801
«   2017/12   »
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31            
글 보관함