본문으로 바로가기

웹페이지 이미지 저장 하기[JSP]

category 개발/JSP 2021. 11. 19. 12:13
728x90

JSP에서 웹페이지에서 등록한 이미지를 서버에 저장하는 방법

 

JSP 웹 페이지를 제작하다 보니 이미지를 업로드해야 할 상황이 생겼다.

DB에는 경로만 등록시키고 실제 파일은 서버에 저장하는 방식으로 구현해 보았다.

 

사용 라이브러리

  • cos.jar

http://servlets.com/cos/

 

Servlets.com | com.oreilly.servlet

 

servlets.com

 

cos-20.08.zip을 다운로드한다.

압출을 해제하면 cos.jar이 나오게되는데 이것을 본인의 프로젝트에 있는 webapp/WEB-INF/lib에 넣으면 된다.

 

cos.jar을 사용하는 이유

JSP에서 cos.jar의 패키지를 사용하게 되는 이유는 cos.jar을 톰캣에서 기본적으로 지원하지 않는 외부 패키지이기 때문이다. 외부 패키지를 사용할 때는 WEB/lib에 위치해야 하며, 앞으로 사용할 multipart/form-data로 전송하는 폼에 담긴 파라미터들에 대한 이름과 값을 얻어내기 위해, <input type="file">로 지정된 파일 서버상의 한 폴더에 업로드하기 위해서 특별한 컴포넌트가 필요하며 cos.jar에는 필요한 컴포넌트가 존재한다.

즉, 우리의 원활한 이미지 전송과 컨트롤을 위해 필요한 외부 패키지라는 뜻이다.

 

그럼 우선 이미지를 넣을 폼을 만들어 보자

 

fileupload.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSP 이미지 업로드 폼</title>
</head>
<body>
	<h2>JSP이미지 업로드</h2>
	<form action="fileUploadAction.jsp" method="post" enctype="multipart/form-data">
		이미지 : <input type="file" name="uploadfiles"><br> 
		<input type="submit" value="submit">
	</form>
</body>
</html>

이미지를 업로드 할때는 form의 enctype에 multipart/form-data를 추가해주어야 한다.

만약 multipart/form-data를 추가 해주지 않으면 이미지가 저장되지 않는다.

multipart/form-data에 대해선 추후 다시 다루도록 하겠다.

 

 

fileUploadAction.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@page import="com.oreilly.servlet.multipart.DefaultFileRenamePolicy"%>
<%@page import="com.oreilly.servlet.MultipartRequest"%>
<%@page import="test.Test"%>
<%@page import="test.TestDAO"%>

<%

	TestDAO test = new TestDAO();
    int fileSize = 1024*1024*3; //3mb로 파일 크기를 제한 
    ServletContext context = getServletContext();
    String uploadPath = context.getRealPath("/uploadFiles"); 
    MultipartRequest multi = null;

    try{
      multi = new MultipartRequest(request, uploadPath, fileSize, "UTF-8",new DefaultFileRenamePolicy());
      String originalFile = multi.getOriginalFileName("uploadfiles");
      String uploadFile = multi.getFilesystemName("uploadfiles");      

    }catch(Exception e){
      out.write("업로드 용량 오류 또는 그 이외..." + e.getMessage());
    }
    
 %>

<%@page import="com.oreilly.servlet.multipart.DefaultFileRenamePolicy"%>
<%@page import="com.oreilly.servlet.MultipartRequest"%>

이 두가지는 cos.jar을 추가해야만 생성된다.

728x90