무소의 뿔처럼
jsp) 이미지 업로드 MultipartRequest / parameter / DB저장 본문
크롬 / 이클립스 / 오라클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");
'JSP > JSP 홈피 만들어보기_게시판' 카테고리의 다른 글
html, js) input 파일 업로드 시 이미지 미리보기 (0) | 2022.02.06 |
---|---|
jsp) DB에서 불러온 이미지 미리보기_이미지게시판 (0) | 2022.02.05 |
이미지 업로드에 필요한 cos.jar (0) | 2022.02.04 |
이미지 업로드 Blob? varchar2? (0) | 2022.02.04 |
#5_DB table 만들기 (0) | 2022.02.03 |
Comments