목차)
1. 파일 업로드 기능 추가방법
2. 질문/해답
파일 업로드 기능을 추가하고자 한다:
방법:
1) COS maven library 추가
2) Upload 폴더 생성 (WebContents밑에): 이곳에 이미지 파일을 둘것이다.
3) fileform.jsp , fileupload.jsp를 생성한다.
--> fileform.jsp에서 form 태그에 enctype="mulitipart/form-data" 부분을 필수로 추가해야한다!! (파일 첨부를 위한 기능)
--> fileupload.jsp에서는 아래 3개를 꼭 include해야한다.
<%@ page import ="com.javatpoint.*, java.io.File" %> (패키지 내의 모든 파일 + java.io.File 라이브러리 추가)
<%@ page import ="com.oreilly.servlet.*" %>
<%@ page import="com.oreilly.servlet.multipart.DefaultFileRenamePolicy"
(추가로, DB에 값을 저장하고 싶으면 javabean을 사용할 때 이미지 필드도 추가되게 하기 위해, (Book.java bean에 image이라는 변수를 추가해주고, getter 와 setter 메서드를 추가해줘야 한다 -> 그럼 BookDAO.java도 당연스럽게 새로운 변수인 image를 위해 함수들을 수정해야한다. )
bookform.jsp (도서 추가 작성 폼)
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css">
<title>Insert title here</title>
</head>
<body>
<h1> Register a new book </h1>
<form action="addbook.jsp" method="post" accept-charset="utf-8" enctype="Multipart/form-data">
<table>
<tr><td>Title </td><td><input type="text" name="title"/></td></tr>
<tr><td>Author </td><td><input type="text" name="author"/></td></tr>
<tr><td>Comment </td><td><textarea name="comment"></textarea></td></tr>
<tr><td>Image </td><td><input type="file" name="photo" /><br />
<tr><td><input type="submit" value="save" class="btn btn-success"/></td> <td><a href="./index.jsp" class="btn btn-default">Cancel</a></td>
</table>
</form>
</body>
</html>
addbook.jsp (fileupload.jsp)
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import = "com.javatpoint.*, java.io.File" %>
<%@ page import ="com.oreilly.servlet.*" %>
<%@ page import="com.oreilly.servlet.multipart.DefaultFileRenamePolicy" %>
<%@page import="com.oreilly.servlet.MultipartRequest"%>
<%@page import="com.javatpoint.dao.BookDao"%>
<jsp:useBean id="b" class="com.javatpoint.bean.Book"></jsp:useBean>
<jsp:setProperty property="*" name="b"/>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>파일 업로드 결과 </title>
</head>
<body>
<%
String filename="";
int sizeLimit = 15 * 1024 * 1024;
// 상대경로를 절대경로로 가져와야함
String realPath = request.getServletContext().getRealPath("upload");
System.out.println(realPath);
//upload 폴더가 없는 경우 폴더를 만들어야함.
File dir = new File(realPath);
if(!dir.exists()) dir.mkdirs();
MultipartRequest multi = null;
multi= new MultipartRequest(request, realPath,
sizeLimit, "utf-8",new DefaultFileRenamePolicy());
String title = multi.getParameter("title");
/* System.out.println(title); */
String author = multi.getParameter("author");
String comment = multi.getParameter("comment");
filename = multi.getFilesystemName("photo");
/* System.out.println(filename); */
/* 이 부분이 정말 중요!! 전에는 addbook에서 set하는 부분 없어도 잘 작동했었는데... ? */
b.setTitle(title);
b.setAuthor(author);
b.setComment(comment);
b.setImage(filename);
%>
<%
int i=BookDao.save(b);
if(i>0){
response.sendRedirect("addbook-success.jsp");
}else{
response.sendRedirect("addbook-error.jsp");
}
%>
</body>
</html>
4) DB테이블에 새로운 이미지 필드를 추가:
ex) 테이블필드추가 : ALTER TABLE Books ADD image varchar(40);
library 추가 : cos.jar
upload 폴더 추가:
WebContents밑에 upload 폴더를 추가한다:
다음 블로그를 참고할것:
rongscodinghistory.tistory.com/77
다른 학우님의 깃헙 주소도 참고할것:
github.com/gracenho829/2021Camp/blob/master/Lab15/WebContent/addbook.jsp
질문:
<img src="${pageContext.request.contextPath }/upload/<%=b.getImage()%>">
pageContext.request.contextPath ==> 이게 뭔지 잘알아보기... 아니.. DB에는 이미지 이름만 넣어도 localhost/upload폴더에 잘 들어가있고, 이걸 heroku에서 접근할 수 있다는게 그러니까, 어떻게 heroku에서 db4free에 있는 파일을 접근했더라...? 아니 DAO에서 db4free로 접근하니까 그렇지. Heroku는 그냥 외부에 프로젝트를 서비스하게 해주는거고...!
결론) 일단 위에 코드가 뭔 뜻인지 분석해보자.
alter table 테이블명 convert to character set utf8;
BookDao --> setImage
b.setImage(rs.getString("image"));
DB에 한글이 깨져서 나올때: 그리고 과제 제출확인시트에서 다른 날짜들 표시 안된거 이유
물어보기
'웹캠프2021' 카테고리의 다른 글
웹캠프:Spring2 1/26 (0) | 2021.01.31 |
---|---|
웹캠프: Spring1 (1/25) (0) | 2021.01.27 |
웹 캠프: JSP4 1/21 (0) | 2021.01.23 |
웹캠프: JSP3 1/20 (0) | 2021.01.23 |
웹캠프 : JSP2 1/19 (0) | 2021.01.22 |