Learn/KH정보교육원

[KH정보교육원 당산] 44일차 (파일 업로드)

Dahoon06 2021. 5. 11. 12:18
728x90
반응형

쇼핑몰 프로젝트의 마무리 단계 파일업로드

 

필요한 라이브러리 : cos.jar("오렐리 출판사"에서 개발)

 

 

 

전역변수로 선언된 (ProductMgr.java)

private static final String UPLOAD = "C:/shop/data/";
private static final String ENCTYPE = "UTF-8";
private static final int MAXSIZE = 10*1024*1024;

 

 

 

파일 추가

public boolean insertProduct(HttpServletRequest req) {
		Connection con = null;
		PreparedStatement pstmt = null;
		String sql = null;
		boolean flag = false;
		try {
			MultipartRequest multi = 
					new MultipartRequest(req, UPLOAD, MAXSIZE, ENCTYPE, new DefaultFileRenamePolicy());
			con = pool.getConnection();
			sql = "insert into product_tbl (no,name,price,detail,rdate, stock,image) values (product_seq.nextval,?,?,?,?,?,?)";
			pstmt = con.prepareStatement(sql);
			pstmt.setString(1, multi.getParameter("name"));
			pstmt.setInt(2, Integer.parseInt(multi.getParameter("price")));
			pstmt.setString(3, multi.getParameter("detail"));
			pstmt.setString(4, UtilMgr.getDay());
			pstmt.setInt(5, Integer.parseInt(multi.getParameter("stock")));
			
           		if(multi.getFilesystemName("image")==null)
				pstmt.setString(6, "ready.gif");
			else
				pstmt.setString(6, multi.getFilesystemName("image"));
			if(pstmt.executeUpdate()==1) 
				flag = true;
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			pool.freeClose(con, pstmt);
		}
		return flag;
	}

 

 

 

파일 업데이트

public boolean updateProduct(HttpServletRequest req) {
		Connection con = null;
		PreparedStatement pstmt = null;
		String sql = null;
		boolean flag = false;
		try {
			MultipartRequest multi = new MultipartRequest(req, UPLOAD, MAXSIZE, ENCTYPE, new DefaultFileRenamePolicy());
			con = pool.getConnection();
			
           		if(multi.getFilesystemName("image")==null) {
				//파일은 선택을 안 함.
				sql = "update product_tbl set name=?, price=?, detail=?, stock=? where no =?";
				pstmt = con.prepareStatement(sql);
				pstmt.setString(1, multi.getParameter("name"));
				pstmt.setInt(2, Integer.parseInt(multi.getParameter("price")));
				pstmt.setString(3, multi.getParameter("detail"));
				pstmt.setInt(4, Integer.parseInt(multi.getParameter("stock")));
				pstmt.setInt(5, Integer.parseInt(multi.getParameter("no")));
			}else {
				///파일까지 수정함.
				sql = "update product_tbl set name=?, price=?, detail=?, stock=?, image=? where no =?";
				pstmt = con.prepareStatement(sql);
				pstmt.setString(1, multi.getParameter("name"));
				pstmt.setInt(2, Integer.parseInt(multi.getParameter("price")));
				pstmt.setString(3, multi.getParameter("detail"));
				pstmt.setInt(4, Integer.parseInt(multi.getParameter("stock")));
				pstmt.setString(5, multi.getFilesystemName("image"));
				pstmt.setInt(6, Integer.parseInt(multi.getParameter("no")));
			}
			
            		if(pstmt.executeUpdate()==1) flag = true;
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			pool.freeClose(con, pstmt);
		}
		return flag;
	}

 

 

 

파일 삭제

public boolean deleteProduct(int no) {
		Connection con = null;
		PreparedStatement pstmt = null;
		String sql = null;
		boolean flag = false;
		try {
			con = pool.getConnection();
			sql = "delete from product_tbl where no = ?";
			pstmt = con.prepareStatement(sql);
			pstmt.setInt(1, no);
			if(pstmt.executeUpdate()==1)
				flag = true;
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			pool.freeClose(con, pstmt);
		}
		return flag;
	}

 

 

 

productUpdate.jsp 상단 폼영역에 사용된 코드

: <form method="post" action="productProc.jsp?flag=update" enctype="multipart/form-data">

         <img src="../data/<%=product.getImage()%>"><br/>

         <input type="file" name="image"></td>

  </form>

 

**  

<form ~~~enctype="multipart/form-data">

   <input type="file" name="image" />

</form>

 

** file 타입은 클릭시에 파일을 선택할 수 있는 창이 뜨게 해준다.

 

request 객체를 전달할 경우

=> 전달 받는 쪽 : HttpServeltRequest 타입

 

MultipartRequest타입 객체를 이용

new MultipartRequest(request객체, 업로드경로, 업로드최대크기, ENCTYPE("UTF-8"), 동일파일업로드시파일명자동변경);

동일 파일업로드시 이름 => new DefaultFileRenamePolicy();

 

 

728x90
반응형