무소의 뿔처럼

jsp) 이미지 업로드 MultipartRequest / parameter / DB저장 본문

JSP/JSP 홈피 만들어보기_게시판

jsp) 이미지 업로드 MultipartRequest / parameter / DB저장

값을변경 2022. 2. 6. 13:17

크롬 / 이클립스 / 오라클DB 

cos.jar안에 있는 MultipartRequest 클래스를 사용.

MultipartRequest multi = new MultipartRequest(request, realpath, maxSize, encType, 
                          new DefaultFileRenamePolicy());

 


매개변수

  • request : HttpServletRequest
  • realpath
String realpath = application.getRealPath("/폴더명");
  • maxSize
int maxSize = 1024*1024*5;
  • encType
String encType = "UTF-8";
  • new DefaultFileRenamePolicy() : 중복 파일 이름 변경

 


MultipartRequest 파라미터는
request가 아닌 MultipartRequest의 객체로 받음.

multi.getParameter("")          // 이미지 외 input값 받을때
multi.getOriginalFileName("")   // 사용자가 업로드한 파일 이름
multi.getFilesystemName("")     // 서버에 저장될 파일 이름

평소 습관처럼 request.getParameter()로 받으니 이미지를 받지 못했다.
이미지를 빼놓고 보내니 당연히 data가 넘어간다.
혹시나 이미지 업로드로 지정한 폴더에 가보니 submit으로 보낸 이미지가 쌓여있었다. 
되긴 되는 것 같은데... DB에는 저장이 안 되고..

그래서 찾아본 MultipartRequest 파라미터..
이미지를 저장하려는 의욕이 앞서
사용법을 지레짐작으로 생각해버린 탓.

 


  • input.jsp
//다른 input값은 생략
<form action="imgAction.jsp" method="post" enctype="multipart/form-data">
  <input type="file" name="imgupload" accept="image/*">
  <input type="submit" value="작성하기">
</form>

 

  • imgAction.jsp
더보기
String realpath = application.getRealPath("/upimg");
int maxSize = 1024*1024*5;
String encType = "UTF-8";

	MultipartRequest multi = new MultipartRequest(request, realpath, maxSize, encType, 
                     	new DefaultFileRenamePolicy());
	
	String fileName = multi.getOriginalFileName("imgupload");   //파라미터 값 
	String fileRealName = multi.getFilesystemName("imgupload"); //중복시
    //이미지 외 데이터 받기
	String imgTitle = multi.getParameter("ImgTitle");
	String imgContent = multi.getParameter("ImgContent");
	String imgWriter = multi.getParameter("ImgWriter");
    
    //DB에 insert할 class객체 생성
    board_write img = new board_write();
	img.imgwrite(imgTitle, imgContent, fileName, fileRealName, imgWriter);
    
    response.sendRedirect("저장 후 돌아갈 페이지.jsp");

 

  • board_write.java 

서블릿을 안 쓰고 (request/reponse) 메서드에 매개변수를 받아 쓰게 했다.

더보기
public class board_write {

	public void imgwrite(String Title, String Content, String fileName, 
                         String fileRealName, String Writer) {

		String title = Title;
		String content = Content;
		String filename = fileName;
		String writer = Writer;

		Connection con = null;
		PreparedStatement pstmt = null;
		String sql = "";

		try {

			con = dbcon.getConnection();

			sql = "insert into img_tbl values(img_seq.nextval, ?, ?, ?, ?, ?, sysdate)";

			pstmt = con.prepareStatement(sql);
			pstmt.setString(1, title);
			pstmt.setString(2, content);
			pstmt.setString(3, filename);
			pstmt.setString(4, fileRealName);
			pstmt.setString(5, writer);
			pstmt.executeUpdate();

		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				if (pstmt != null)
					pstmt.close();
				if (con != null)
					con.close();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}
}

 

 

어려울 것 없이 통상 Action페이지에
MultipartRequest 클래스가 추가되어
multi 파라미터로 받아 DB로 저장.

 

 

서블릿으로 MultipartRequest ~ 더 공부해보기 (2015년 글)

 


2022-12-29 로그

추가할 내용 :

JAVA에서 deprecated되는 이유 : ServletContext에서도 있는걸..deprecated되는 중복으로 가지고 있어서

String realpath = request.getRealPath("getRealPath");

String realpath = request.getSession().getServletContext().getRealPath("getRealPath");

 

 

Comments